pureadmin-0.4/0000777000175000017500000000000010670523443010352 500000000000000pureadmin-0.4/config.guess0000755000175000017500000012626010524305372012612 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-07-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[3456]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[3456]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pureadmin-0.4/aclocal.m40000644000175000017500000017003410670523035012130 00000000000000# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [AC_REQUIRE([AC_CANONICAL_HOST])dnl USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([msgfmt -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.in. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_in,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 35 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [AC_PREREQ([2.50])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac if test -n "$1"; then AC_MSG_CHECKING(for intltool >= $1) INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { print $ 2; }' ${ac_aux_dir}/intltool-update.in` [INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($ 2, VERSION, "."); print VERSION[1] * 1000 + VERSION[2] * 100 + VERSION[3];}' ${ac_aux_dir}/intltool-update.in` ] AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' AC_SUBST(INTLTOOL_DESKTOP_RULE) AC_SUBST(INTLTOOL_DIRECTORY_RULE) AC_SUBST(INTLTOOL_KEYS_RULE) AC_SUBST(INTLTOOL_PROP_RULE) AC_SUBST(INTLTOOL_OAF_RULE) AC_SUBST(INTLTOOL_PONG_RULE) AC_SUBST(INTLTOOL_SERVER_RULE) AC_SUBST(INTLTOOL_SHEET_RULE) AC_SUBST(INTLTOOL_SOUNDLIST_RULE) AC_SUBST(INTLTOOL_UI_RULE) AC_SUBST(INTLTOOL_XAM_RULE) AC_SUBST(INTLTOOL_KBD_RULE) AC_SUBST(INTLTOOL_XML_RULE) AC_SUBST(INTLTOOL_XML_NOMERGE_RULE) AC_SUBST(INTLTOOL_CAVES_RULE) AC_SUBST(INTLTOOL_SCHEMAS_RULE) AC_SUBST(INTLTOOL_THEME_RULE) AC_SUBST(INTLTOOL_SERVICE_RULE) # Use the tools built into the package, not the ones that are installed. AC_SUBST(INTLTOOL_EXTRACT, '$(top_builddir)/intltool-extract') AC_SUBST(INTLTOOL_MERGE, '$(top_builddir)/intltool-merge') AC_SUBST(INTLTOOL_UPDATE, '$(top_builddir)/intltool-update') AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found; required for intltool]) fi if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then AC_MSG_ERROR([perl 5.x required for intltool]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi AC_PATH_PROG(INTLTOOL_ICONV, iconv, iconv) AC_PATH_PROG(INTLTOOL_MSGFMT, msgfmt, msgfmt) AC_PATH_PROG(INTLTOOL_MSGMERGE, msgmerge, msgmerge) AC_PATH_PROG(INTLTOOL_XGETTEXT, xgettext, xgettext) # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) dnl The following is very similar to dnl dnl AC_CONFIG_FILES([intltool-extract intltool-merge intltool-update]) dnl dnl with the following slight differences: dnl - the *.in files are in ac_aux_dir, dnl - if the file haven't changed upon reconfigure, it's not touched, dnl - the evaluation of the third parameter enables a hack which computes dnl the actual value of $libdir, dnl - the user sees "executing intltool commands", instead of dnl "creating intltool-extract" and such. dnl dnl Nothing crucial here, and we could use AC_CONFIG_FILES, if there were dnl a reason for it. AC_CONFIG_COMMANDS([intltool], [ for file in intltool-extract intltool-merge intltool-update; do sed -e "s|@INTLTOOL_EXTRACT@|`pwd`/intltool-extract|g" \ -e "s|@INTLTOOL_LIBDIR@|${INTLTOOL_LIBDIR}|g" \ -e "s|@INTLTOOL_ICONV@|${INTLTOOL_ICONV}|g" \ -e "s|@INTLTOOL_MSGFMT@|${INTLTOOL_MSGFMT}|g" \ -e "s|@INTLTOOL_MSGMERGE@|${INTLTOOL_MSGMERGE}|g" \ -e "s|@INTLTOOL_XGETTEXT@|${INTLTOOL_XGETTEXT}|g" \ -e "s|@INTLTOOL_PERL@|${INTLTOOL_PERL}|g" \ < ${ac_aux_dir}/${file}.in > ${file}.out if cmp -s ${file} ${file}.out 2>/dev/null; then rm -f ${file}.out else mv -f ${file}.out ${file} fi chmod ugo+x ${file} chmod u+w ${file} done ], [INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir='${ac_aux_dir}' prefix="$prefix" exec_prefix="$exec_prefix" INTLTOOL_LIBDIR="$libdir" INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' INTLTOOL_ICONV='${INTLTOOL_ICONV}' INTLTOOL_MSGFMT='${INTLTOOL_MSGFMT}' INTLTOOL_MSGMERGE='${INTLTOOL_MSGMERGE}' INTLTOOL_XGETTEXT='${INTLTOOL_XGETTEXT}']) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be exetuted at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] if test ! -f "$1/Makefile"; then AC_MSG_ERROR([$1/Makefile is not ready.]) fi mv "$1/Makefile" "$1/Makefile.tmp" [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.tmp" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # This was merged into AC_PROG_CC in Autoconf. AU_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC AC_DIAGNOSE([obsolete], [$0: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ]) AU_DEFUN([fp_PROG_CC_STDC]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 AC_DEFUN([AM_MAINTAINER_MODE], [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer], USE_MAINTAINER_MODE=$enableval, USE_MAINTAINER_MODE=no) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST(MAINT)dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) pureadmin-0.4/pureadmin.desktop.in0000644000175000017500000000037710667602725014270 00000000000000[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=PureAdmin _Comment=Administer and monitor your FTP server _GenericName=FTP Administration Exec=pureadmin Icon=pureadmin StartupNotify=true Terminal=false Type=Application Categories=GTK;Application;System; pureadmin-0.4/mainwindow.glade0000644000175000017500000015046210670517363013454 00000000000000 PureAdmin GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 800 600 True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_CENTER True False True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True Open up the debugging console. Useful when reporting bugs. _Debug Console True True True gtk-quit True True _Edit True True gtk-preferences True True _PureFTPd True True Lauch PureFTPd server _Start Server True True gtk-execute 1 0.5 0.5 0 0 True True Manage pureftpd users Manage _Users True True usericon.png 0.5 0.5 0 0 True Manage the current activities on the server _Connections True True Closes the selected transfer _Close transfer True True Disconnects the selected user _Disconnect user True True True Terminates all currently open connections. Close _All Connections True True True Shows a notification when the selected transfer is completed _Notify when done True False True _Help True True gtk-help True True Visit the PureAdmin support forums using your web browser. Online Support True True Visit PureAdmins online documentation using your web browser. Online Documentation True True True Information about PureAdmin _About True 0 False False 1 True True True True GTK_POS_TOP False False 5 True True 600 True False 5 True <b>Uploads and Downloads</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False False False 0 True True True True Show advanced info True GTK_RELIEF_NORMAL True True False True 0 False False 5 True 6 2 False 2 5 True <b>Username:</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True <b>Remote host:</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True <b>Action:</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True <b>Progress:</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True <b>Elapsed time:</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True <b>Remaining time:</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True True lbl_action False False GTK_JUSTIFY_LEFT False True 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True lbl_host False False GTK_JUSTIFY_LEFT False True 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True True lbl_username False False GTK_JUSTIFY_LEFT False True 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True True lbl_remaining_time False False GTK_JUSTIFY_LEFT False True 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 5 6 fill True True lbl_elapsed_time False False GTK_JUSTIFY_LEFT False True 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True False 0 True True lbl_progress False False GTK_JUSTIFY_LEFT False True 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True GTK_PROGRESS_LEFT_TO_RIGHT 0 0.10000000149 PANGO_ELLIPSIZE_NONE 0 True True 1 2 3 4 fill 0 False True True False True False 5 True <b>Online Users</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True False False True False False False 0 True True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True userconfig.png 0.5 0.5 0 0 0 False False True Manage Users True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False False True True False True True Activity False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 5 True False 5 True <b>Logfile output</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_POLICY_AUTOMATIC GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE False 0 0 0 0 0 0 0 True True 5 True False 5 True True gtk-clear True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END True File: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True [logfile] False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-refresh 4 0.5 0.5 0 0 0 False False True _Re-read logfile True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False False GTK_PACK_END 0 False True False True True Logging False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True True True 0 False False 6 PureAdmin: Debugging console GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 300 500 True True True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 6 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT True True False False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 2 0 0 0 True True True GTK_BUTTONBOX_END 0 True True True gtk-close True GTK_RELIEF_NORMAL True 0 False True pureadmin-0.4/pixmaps/0000777000175000017500000000000010670523443012033 500000000000000pureadmin-0.4/pixmaps/up.png0000644000175000017500000000174610667602712013114 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ­#½utIMEÔ 85Ùf=sIDATxÚ]“[L[e€¿ÿ\JÛC)¶´@øl ç@t2a$:$3K‰·Ìx‰1QôA}Y²¦ñÁD]Ü4q&îeè¢&SÑ92¶é채ÒÒçô\|Zbüž¾‡ïõüžÇž«ëéê< –tkWņžçÖêú\tjæû±K£§&Î}ýo/n˽½»ºº:û;ÚÛ^)+ |šU‘YM¤Iå tÝ`j6:?üîÕñ±w®ÿòµ ÜÕ}@Ý¿¿o «cçëb¿×° V’Yr†ŽC¨¸¿ß恵ݲ'—w‰ έÍOÛÀŽÖ¶gØ}ßKá`@hš!ɤ KR°õ§¿GCuS“£ÈŠ"v´¶¾ØÔÜô,€ÔxßÍ-Íýš×+tÓdfa……Dݲ1s)†¿äýo?…¡8ܘõåy4¯Glkhê¯lîI-Ûwƒ%ÕYÝ`"ãÖZ†œa‘N¥¹qc„·ŽÀ‡¡HÆx³ƒ7^}[OQWn®­ß£øýþ{®ÝüKšŠ-"¸ñz5ÒºÉgo3úã7ˆ"B2’+½·‘?£Ã<ýHO¾vD$×3w˾HýÃÕ›·´[XäŒ<™œÁo—.°t¨mİ ¡P{g ùÉ Œ¨ÍêúÆeÙ[^×¹œ2w Úšêðzüâ$#£½¸BnÊ…B©ðRfÙ BÄ»jYüà rŠ)¹‹å²!aZ637&ùiâÄÑ}¸}6õ™U"J9Ur)Uj•r¡;'ž ÿýAYO'*<È^I)ðVo*çı#ÄûªÅ>Ô•$5[)SK‰2T>—æ˜þa±–Æ1£Šbd’™åèØ¸\ uÿ<<&v?tëìi’§†ˆ/ÎH#丨´¡H‰»€ØwGˆ4¦±¬ÿ$çÿ‘\ZMQ¡¶u{o7Š/Ìù‹¿’Í ânЉ ¤Q*|àQAVu'¿ñpVþvlûb|ú²6+Y=ãa_ýĵ)Õ’\X¦‰-)à˜àÙÇÆ6²I`˜T€$pœüÒÍ+ËgbÑ&w`Sƒ«(1€™_‘sÄ¥"òBFÎd1! ³·o”B ¨*€à©p{x›*©¨BÅ‘dæãqÌëk/ú¿Ceo‹x‰§´IEND®B`‚pureadmin-0.4/pixmaps/down.png0000644000175000017500000000173710667602712013437 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ­#½utIMEÔ 7«™lIDATxÚ]’KL\e…¿ÿÞ;ób˜…-]T-ø(ÅR*­Ö"Ѹ°îÚ`Œ.hHŒ¦ «ãƘ¸Ð ‰ º@£Æ6¥¶Q[¨(m1ÊC`xöÁ”¹Ì™ûvÑ41=«³8ßÙœ#xDo½›èì8p<+9ðyãyÝd}S]™™û÷Âõ‰ño¦ÎÏü?/šç_}ÛÛÑq ¯í¹–v”—FCEfs+ÃvÎ@× æ“©±Ë¿|vsòú™é+ß2ÀS‡Þðtww}ÚѶïT´8ì7lÃ{é,9ÃÆv\bá ‘â°/Q_מ3ÝèVžó÷Wç`osˉƒû_膋„$K¤µ<Ã¥ÿ½w˜ÉLâ‘¿ÓÉaÙ…R!9@D‰Pæ-Ã+y1‡’²²]µõ·+ápøÙ[³KÒ\r¹ ¿?€fØÈ²ŒiYŽ„@`Ûê¶&ÒªöŒò÷ìB`¼Ãv†ÉŸã£\AX_š#ï4¢Ù[Ö66º£³º¸Âç§?$º{\öW$ÜÙ¶Z.- Î}9ÈòËÓx_wÙùZ¡ª’°°È99’ž$f³Ùž!ëU‹do0’ð—¿RZ»ã;¨Ü]ÍØÐ' ÖBฆc 9åÁrâ5qV6WØ>“ÉËzf+î‹V¾$)þêª JÊ*ÙÅüþÓ%DûØr-ònÍÖPm•ë7Hö&w”!Ù6õ*Û2k]_´6›Í‹•åTÕ&˜¹ÉmmëI Ã5È992v†5c…P¦ŠW#û£ÜM¯þsUòjŠ‚Ç¶µ,É¥eR©4æ I*‘"³7ƒWò"!¡©ðƒp-Ò·€e0q]7wÝ´Œ\Èã F~»ö‡¯oà£÷Oòó'cäŽå0<ú„NÝWu´´4_™ŸŸû¸ú T@ÕR÷f¦&6óYÍI«ª,”BåÍ#ÊÅ‹p‚½AºŽt]þøX|øO‡“À)àtÿ…žž p&À> (ÄHˆ&RQ”|IEND®B`‚pureadmin-0.4/pixmaps/user_identity.png0000644000175000017500000000530110667602712015346 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÓ3gî NIDATxœí™{l[ÕÀ~\Û‰ŸyØi›¤IúHx²,<ÒÇXµ±vª† @éLÒ&QVÁÚ1 ´‡¶VÚDжiÝk7$ â516 Ðµq¶ô‘>Ö¤i›&ivp'ŽcÇ×¾w\_çÚMÒòŸttî=ç»ç|¯ó}ßù.|WtŸ/_Îê¯8|ê¼^ÓÔ14M»¢`Ì3§K5} OH5Cj> ˆ©–à*2‘ t(„ßF!LÛî*’Ž…Ù+Nd®q=ŠÄ—ïßûØS,¼æF‚ƒ}ü¼óÒ6€‡0DP´!ñ%Ђ…x;©¯¾ÿQ¹¢fq¶&Q4áH}s©Žá²@®3ÖÀs?ù>ß]þušïyz6\Šô§€éÔ·WLùlVâÓ"s=ÅÌõÓÓº_-ù4  UóÜ|àkOO 2§´ˆc§Î?ÌL S™P=­Û Ï´½![¦±$‚¸F:Þÿ‹L*fÏì{Ù05ˆEÆßÛ±¹§uûúËÁ€ê €ÐÙ3À·–4d MÇâ H_…3¾=Ó=ø˜OS`1ŽÄ uð'ý§×XÌ8í6€ÈL[>Ñ)d3 "óÝ?þ̓"Omùoïj@–e$Ibó¶×U|3©†)Eœp-^0o+À``”#ÿ;«Ý§ …ÇÀ„‘î>¿vNÐ4#3^›‡eœýn,w?¾u¢çìqÄx”%•£”•:ÑëôôG¬¸Ýn¢Ñ(áp8—pxîáe`‹Íî@–%ŽÜ‹ÝVȶ`óÓ?Àh*½‘ÎÃ{#oî …ضm[1Ši&˜1ÓŒHŸÍ€š>XW=øÛ‘ÀÐyU§Hdn«5±iÓ&ª««s066Æþ·þHcÓm…Nd)‰”yïÝwøÎÁ\ðb)*GJˆD]œ:{¦Õ?ÂívãõzY¾|9@KµifLVV ÎU Ê‹.Å£ «›ç^D¼,Ëi³’$‰d2I2™$‹q¸_ÏÉc‡§B$ba¦‚Ý„&"Äb1b±ûÚ"FBÄÃÜ:{=‘H„ÉÉIhiiè\€0£˜lZðZ7ªÓ4=€8=Å‹¿YCdl« Qì²S•"þÁŸÿ Q‘’qJ¬"C!‚ ¤ÛÖß˼yóð;pœëÀSâäà±.D{mzÃþ¸‡#‡ö§ßËËËÑ뙃Aêëë9òö 4~ïÉ¢ŠjNªä\мþüÑO Ré¶Rì²ÐëÝA¯wñxœx<βòólºã?^ð"×Ú»1 &AÀf³qóÍ7óÆžsÇ&8x¬‹x"ÝnÇ`0 ×ëq8øÎ‰xÏLs<`¦±±»ÝN0D׿›Eæ>Š]vvïüÝþ”,d%Œyó÷‰Á\[ÆØáÎúÇ$¶>PC• {bZ*‹¢Ta2™0™L‚@ii)V«•]'Æiyi­aš››±Ûí8–,YBUU%%%¸ÝnJKK‰ÇãèúwÓýq‚ÿˆ¢± Pû,^¯—ÊÊJ\.N§£Ñˆ,ËTTT°jÕ*‰DZ#göüêÚ¹©ÜƱöcX TZUâÓ0éHŽÄP €A°`6ê@§C§‘¥GäsÜ¿³ËRÒ‹{Ñ‹kV!Ë2ƒŠŠ šššE‘¾¾>¦¦¦(..ÆïW|YY¸\®´´Ë£ã 3P5¯„÷¶òÈÆ­÷‘f=ÄiÂY–D†G”Hê)q2מ$›@o´íexdœ'?fAh.v,Cc:s]Ý©EdÚÛÛ‰F£8úúúèííell —ËEYYgÏž¥¨¨ˆööv>ü(€I0â°›à‘[µ_•gÓ€$ßÝùËúéèOOl¼ÓÆèxXµC&#]¨ ÞCÛþŒ±XGÍD$er2J¡±“ ¤â466¦™ñûý”••¥{u¼©© ÇCWWÕÕÕ|x*D29‘ÖR>È>ÄÚdL0:Ù´£ €öSÝlÙñ'‡M´u'øÙ?ÚÐtH¢’ÅbqFFB˜L¦ŒEµæ¢í;;;ðx<,X°€ºº:æÏŸÏúµ·ò«Go§§u;û^ûý«Ù’ÏŀʀQ§Ó,³ùµ~J‹ìàñxp»ÝØŠXæ˜ÐuLNc0ê1™˜\Š´R—e™Ã‡ãóùðù|¼òÊ+ŒŒŒàóùصk§OŸÆ`0`µZYu½‰‘¨‘Ž(£¡0åsJøæmõų1Ó„€(€,ÉȲDËÛ~V|m!k×®%™L²nÝ:l6BÊ\T“ÉîC¡uuu:tˆÕ«W§Çp¹\x<@z A§æÚEÌ++áÀÞ÷H$%Ì‚0«ËÏåFE”k"2HŠUY­J—L&/"4C…š¹ºº:dYÎ ^;3&$Ë2UUU á|Ça<%NÜ%.n¹kÃZ 8¡¹Î€ÄdIͦf³yV)çcf6¦òõ¢(òß®xË]r® ¹5 âÉþ½Æ\àx3™Lb±:Òy €×ëeéÒ¥ 1gΜ´766rúôidYÆét¦l Èðú¶}Ëûö=Ç Ú…5Ÿ«s’çùÿóÎ9 û‡ Ô/—öéÿ©© àš5]»Ò{ò 942(5]ûîW¨í3ú»þp@ÌäÅ+ówS¼ÔßË¡ƒõmS‰ÙiÀ¤Y­xw¨@àô³Ñá³§}¯¾©%hæ_|;Gß#Ç8ÿÉõí³8÷÷Ö›¿¿ |¼ŸB0B<öÚ™øû'NtGbq6†©;oŸû?oO£¹9†OõÍákLT Ô+àA!hóê" E ëé cW躗žïÃëõðî›#H)ùziu¢Ôá}m«À@Ú$ûý5#µºÕÅÄÍUž{ú)&o¥HÌ$y糸® 9áøÑŽÞ*–Ý”€œ‰Dö«Ù…eúŽwbæò´:C?a9¹N×áV\!8Pë«dU÷ƒîÈ¡Ìë4ƃÑP„Ï/~Évó( gs-K$ÞÈäøuÚoL¶¼5|Æù`ì×k@± Ù-ÙbôðiïO†ýø<>¬Âö²ÀúÌÃHg Å0ÐÜ"¾¢Ã¿Ý+¾9 ܨŠZFºƒ©a;iT 65œ^]G-äñ( +¶KÎv*EÝóP|@MªEYKA€-a[€§FÃjhÁr%Ž”¸RâJÔŠ9ÜS¨”Ö^@µ…ÀÁÅŠ®Wj¸rgjE)q„‚WU˜I¦~œjÀ2T‘¦VóH­€AÂ@gÁÜ5`Éð1ÓÔÄS À?{% ™'i]~¨C}üE´@#ì'c¤ßVñnØèGp·.‚Ïð“IÙÌæª%ìtHÉxë±g"±üþÙ|–¤·ˆÓÃ>ÜF$bÛrðûEìñR$`9\6Í̲å ¬¥ç¸4zaõÖo—¾óÖèø>4]E ‰eærØö|%°¬PÛ€IŽ;·¯^<·¹23`™æâÖâÊ86ùÙhÈWoæz@„–“k—7VΛÍQ»ïhÚ€héd³dEˆDbuÍñ¨qfiÔÜÌ&Øù½í½€å»jKªË†‡H)?¬›@¡”WX†êì¼ñò ÊêË¿A¡dO±ðRmü¶Ez¡IEND®B`‚pureadmin-0.4/pixmaps/user.png0000644000175000017500000000162610667602712013443 00000000000000‰PNG  IHDR‰ bKGD·³ÿ±¾À¿ pHYs  d_‘tIMEÓ .}Ý€´#IDATxÚ”Ík\eÆŸ{ï{ïÌO%©¤‘t4da…BÜÅU÷Ú…ø¸¥uáB°.$-ºR!Ùµ ˆ ?º(Å¢‚Òb¢ š¤£AÍt>îÌ{ß÷¾ß¯ »*3qÎò9šåcÖZ[ä¹4IÂ¥* $€—Ii>˜)‡‡ÿtÒFuîÏFŬ:ëZ[p®|Æ G©!¸ÈÌ(ë fÊá⩹n.ÓëBh)¥…””J/M™O)Gž`B}=ô²ƒIÀà^áË.9•ß—ž|ä±g|Ÿ4”r 2ìîzB(OJÁº?6¾ýêåë3_Ê•+vÚíýß”2N)¥ 8/PL Á?¶V^žöG§>ØR©òz·Û‹¢¨¶Ê¹¬Qš”òw1ë7n¼6žæ ¦5âx±'„øÎZÿ¯Nçp¹ÝþýsJóõíí7‡8¢þï)׸SD²§IEND®B`‚pureadmin-0.4/pixmaps/pureadmin-24x24.png0000644000175000017500000000243510667602712015231 00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ  $áó>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3ïX`IDATHǵ–L”uÇ_Ïñ@œwNÔ óGŒ©‘j?ýÁò×UZÆjµ=nfš]d?ŽÒr’Œ´åÈ霬³šÍYnÊÚ¤È àBŽ?8#9ÎãÎ\ÜÃÏó|ûCîv‚(þÑgûîù~?ßÏó~?¿¾ûÂÿ,Òú9Š¢´ÄåråÍ㵟£(Šðz½B×u¡ëºÐ4MD"‰DD8CCCBUU¡ªªhllŠ¢à©q¡+Š"Âáð-à# ÂápŒ  ‰¾¾¾(É(‘o7I¢¡¡aÜq.((sOk# ‘——wWðÖÖVTU½w³ÙŒªª!B`Fl²,cƽ ÒÙÙ ‹—¨N×õ;zx[Ã0°X,äææŽŒÿ !ðx<˜L¦»LVe.ð~<`0š`0Ày÷Ì™ý0©)S¸qãFÌ‹áJªu¹\M•åÛ‡ àܹs8ΧÓy4J ª*>Ÿ¿ßßï§··—@à&øºµëp·ŸçïKÑ4 IºÙ¯N§³Áb±\­¨,ßþúku F˜?þ$`’¢(kL&ùùù±“E“,IYYYüò Öodÿ}­y9FPUUU“kgÃúMì?°7¡´¤Ì QÐår¹N)Š"dY¦¾¾žžžf̘Ajj M-g™—÷(ýýט0Á €Çã!##€œ\»¨9pp¥%e vÌìtww“““ƒÛí¦©å,ÎMÅ \¿ÆÅK;ß!ØëÇ>ËNzz« p”¼·EjǬ"!3gΤ©©‰¢¢"ú©Ú»‡7681 Ph¤äû˜hµR÷Óq’ÍÉdd>à(-)«½ÓmjRE¯®®¦««+VAW®øh<{úãåO¯ ÍíÆë»ÌÕà?ìúô3@¬óL#È¢ MÓ0 ƒöövü~?ÝÝ^/|û¬_¼„Ó3ñùzðú.óÈÜyL™šÊ[·<7òЦó¤èB×u4MCAZZ6›¤ “y·ú¯î<͇ßzù½¥û,;6›… aµZ¿ÛñÉÇ+Æ"€Äø<!HLL$‰èû——¶`÷æBvo.ä•e³ùúŒ $‰Ÿ­gêÔi,\°Y–¨¨,_ÅéÁ¤èu••Evv6K—.EOœÌG‡ÿ¢z«ƒæ¶šÛ:˜–bàÙgV±zÕ ÔÖýˆÝngÉcOÔTT–o™d3¾¦èùb‹yâ[ñn6²Ù½¹æ¶4Ý É’‚É|S×NÁ4Ï;°&×dff8V.sÐßßÏé3¿QZR&Å—éà?zäûÀ®arH˜¾|ç€D9S²¡P˜c¿x:ÖºN:5l'Šß~óhm]ÍWi÷§ßö6@hxŒ’žÀu̇{ -‡NÆÛìùü‹?+*Ëò÷^Y »Ó«â™¾|ç‹À‘8Uá¥[NŽçßÿA•&‘Í„«ÉIEND®B`‚pureadmin-0.4/pixmaps/pureadmin-32x32.png0000644000175000017500000000306510667602712015227 00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIMEÕ <•EûÂIDATXí—mlSçÇö½¶c'ÍË Î‹B— ˆ­°• ]ÙöeR5‰†ÉšS/ C$ª‘M™˜4iAmH€FuU Ù ª†HÙÚI¥¥ mY+OëµE:!f8~ ~¹¾/¾w[$…ÄN9Ò•®ÎÕ=çÿüÏÿœçy,,bû÷ï÷8Î×ÈÓÒéôOÏœ9ó2ÃvíÚõlOO©iš©(Ê’ªªfOO¹oß¾ÎBòXæôz½’$;v UU1Msé@ ¢(ÒßßO2™|ahhèõ|Xæ”$i|ppMÓòJ`š&º®388Hqqñ¯×[–Ïâ£>hšÆýû÷ .]IIIöÕ Ì.@&“áæÍ›èºžwrAhmm-°¸ØÇL&ƒ$Iy›Åb±ÀÊc´|õ’76›h4šw0§ÓY0q±Õ¸\®‚4°‹– ‹,?¾dWb·Û5vp89á¥R©Ç«‹ÅB"‘ø‚?‰0666Ï×ÞÞ^p,  ¦¦»Ýþ…ºVWW366†×륢¢‚H$¹sçèêêzhœç::«$IÚòçW~÷—¼5`š&N§AEQ‘e™xÓÓÓøý~FFFeY–sõV%ÇÐôôô<Ít8üƒ¶Ím·¶¿éO?]¹reݾç::WæÍ@ `Íš5ƒA®^½Ê¶mÛÅåra³Ù¨¬¬ÌÍQç•멯}µ¿µ­­`æÞ=åÎéW®\ž*H„@MÓhhh`ûöíœ?€®®.dYÎuăm˜Ô¬UšœhI§Sdô {ûí÷^=õ›_$µk׉D¨««Ãçó‡ill¤¯¯o^«F£Q<È©S§hjj ©iý?Z6µ˜×ß}Ç2 ˜|©à.E‘ªª*öîÝËÐÐèºÎÔÔÕÕÕ8A ¿¿Ÿ£G"Õ¬bÓ¦õæ·|ðѧ╋Ùe ¢…í·gÏ¢Ñ(—/_Æçóåü½½½Èi©f›7·ðá‡K'_’,Ã0UU)++cãÆ¬[·QüÿïÇçPw7¯]å›Ï´2výc"woQ[fqw—½dYÐu«ÕЦi¹>×4 EÕøý›ÿFqoá¥ßþ•¶ÖÆ®ÌO~üC(//z<žŠ/}0M3Ç@–tZáWnQTQ‡T[OYíjN¿ñ ží†¢(>|·Ûñx<%_ @&“A„Ü!ÕĹw¦p”×M¨|êûŒÙx’ ©’“'O¢( š¦¡iÝÝݸÝî¸Çã)Ê€c¡Ã0 ¬V+ªª‹§9yñ&%U Ä’*ÁÛ~R‰¢©âŸ ··—K—.é'NœÈ1vàÀÜn·ìñxlËeàOïÏàZñ$±„F$8A*§rE5“·ÿÃÐ/¶!Š"“““bvËαݻwn·[ͧ 2.—‹úúú·ƒ1.}’À%} ƒXø÷îNñ䪧LøyëåC¹“1Àµkמ>èììD×uÂá°uëÖ­²¦ií§OŸ¾¼€d:~½¯¯oµiš‚aVÓ4…”&ØKW·Q Ãí;3?÷³¢¶Ñ Lø-ÏÔ„9räÈÂ#úg¡P¨xxx8¹cÇt]§´´´Èf³½ùà̲ĵÍOEm;í_Ó¼™‰q?vgñÐ->ºpd¦‘’s‘Ì\ií€X___ÜÑÑ1ÞÜÜôù|µ¡P¨tdd$ž€…VT²r£ôõ-ÏßÉ:Æÿyã{áú4 Ï%.ÊÒ9àEqV×õÍ–¹PÂܪ¶’ê'´Ä­€(<ê³ñGýÈȱÈ~<IEND®B`‚pureadmin-0.4/pixmaps/pureadmin-48x48.png0000644000175000017500000000673510667602712015254 00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ kZð jIDAThÞÅYyt“Wvÿ½oÕjI–åyÁ 6Ø`˜`Ìš¸-9i9œi@Óiì„ ¦™$=ÍÀ’t ¡'4ÂÀ@H‡0dhR–0PlÀ˜ÍÆ6–¼JH²–ïÓ·õÉãIÌ/¡ïœ{t$½ï½û{÷Þß½÷}÷9ÊËË !$ßh4~dµZ ¿k¾¦ißú-ª^¯÷#UU×~ðÁmx£¢¢bô‚ >9~üxTÂxñÅ{ÊÊÊÞY¹reÚpèEßϤªªªäëׯ¯ì±Ç?ùä“:$ š¦AUÕû „`Ú´i\}}ý˜[·né–-[vöäÉ“ÑïÀ† ˜›7oVýxýúõ&ƒey@F¡ª*ŒF#ŠŠŠt_}õUA kkkO ùsnÚ´‰®­­}Êjµîܺu+aYápŠ¢€2àÍ4MÏóà8¢(bíÚµB$Ù0yòä·ž}öYi0˜?÷g0´µ··ÿdÛ¶m`Y²,ƒ¢(Ð4=èS²,ƒçy¬_¿^·téÒ%N§s×°`‡Ã:»ÝNB¡8ŽÔéLJªªEN§©©©èéé¡°ƒ]ù.“K’·z­ÐM~§¿UUa2™””žç¡(ÊXˆ¹ïh§i¸ÝnȲ Žã€¢(deeeÙa¡wf ›Ó4ÔÔTX­Ö^j(€ÆÆFèõzPõ`Ä]*N‰5=!4MCQ”A6 Àã¸A[€¢¨!‘À ¨ª š¦ÑÚÚŠÎÎÎAŸb$Ãáxð!p:`YÇ zCI’`µZ€¸¹5Mƒßï2*ŠQ‘žž>,L4 ðù|0™L0v!B!p¹\0›ÍžFã  ˜L¦{²EQ` Ãôž¸,ËPEçù!•"C âûIv4MÃår¡¹¹ªª"%%YYYÐétPš¦ Êý†Å…b]Âáp¿€X–Ess3ª««QRR‚H$‚¦¦&œ;w¥¥¥HII¦iÿ?4w…––Bú=E–eÑÕÕ·Û™3gÂápÀï÷ãôéÓøðÃ1mÚ4Øl6ȲÚûɺ<ÁÕQ~ÀúÞsöµÊÂ… qñâEœ8qÇŽ˲ i&“ gΜMÓ˜:u*ÚÚÚ’ì@GG'šÚý˜3o6òóÇi>ùìÜ­æö—SR/}¯¥D¼dè;â NII DQ„(Še&“ f³&ŒÇ¡ß€ÝfÁèÜqèèhÇî}ŸÀœ`ÅÄüqøÅ–mÚõºKµ‹ùâ¾÷ø’è¾ó@ß›æøíD¼'ˆwj¡Xò‰÷w½Ý—;?\²¿xó—èp7ã7GŽBo0 ø¡"üÇžýxãg/Qo¾ñ³¿åüÇ—Ö­3|o¾Y´I’EQÀ0 $IEQƒ iápŸK–,1Ì›7ï§.—kéêÕ«éaÐ_©·B¼ž'„@°, A`6`âsu­ø¼&€Â‰p{eüáJ+x½wB,>>~“ò²Á0ÂáÂá0|>YºtiÚìÙ³ÿ©¥¥¥ìùçŸ'C Ë2¹Wÿ*Ë2€çyˆ¢–e¡H" F3.Ôw`ËþZŒ3ݾ:ººqóÆ5t{î‚ey0¼o¿ý6Ümmày‚ Àï÷Ãï÷ScçλU–å²Í›7“¡ šššxŠ¢HVèÛÐHRF3œ¬nÀÇ_yaIË@ÃÈÊð¶Ö¡ãæ× ŠŸ§ UO=Œ¿üëEؽ{7|>, TUE €(ŠÔ£>š‘‘ñFccã €`½^/OÓ4¹W‹©i*ô:&žM€½_ÜÁ¶ƒ—6*#’‘ªGãÕ pßiEZN!:¼a,žêÀäÑcñâÅØ¸q£&‚Ïâz½ž^¾|ùx‡ÃñZUUUÁ`-@‹¢HÅ- ( $IêA *2,F5õMXþúoáÕç–ìÄ´B' FÙpîìܾu6g:ƒ,æä[±|áty{ÐÓÓƒ‰'âË/¿ 8p S¯×«qFóx<`†.///åy~}eeeö@_òlNNŽ¢¨'ËËË­z½z½‹‹:£2ÓpþZ7þþK(= yÙÉ({( ŒF°cßoqµök8ÇLoNÂB;Þ|ñ¯À±,hλÝرcÇÕúúúÿ”eyÄ”)SeY&ñK4†a˜ÜÜÜ<·Û-dffž«©©‰Þo&ÖDm6[T-îëñ$EÅbÃ0ø·Ã§ñã-œ"'¬zuÍw±çÈY4ݨCŠs#rȱfE14o‚5@’$ƒA¤¦¦ªGOœ8qÛf³½^ZZš)©¯¯Gff&(Š¢Nç.—k?€š”rBBBEQ׬Y£ ‚@bîDÅnàH¢.JÎÖ$%®œûßL«¹Úü‚Ŭç›;üº ËäÌ„«[nž?²FáڢĠP4#éõzI§ÓEFcÔápˆz½þîçŸÀöf‘EBnÒäÅÿü¯ó“ ­¿|æ³ÆÃžš½võÖGõû*6ˆrl6¶Ž®w­˜>óæÍ›1vìØ'¦OŸî¸|ùrWggçÛ×®];|öìÙèP| @oŸ¶züȼÉk²3ì¥QQÔQ¼Eioï¾pùø»ÿºýE€h €Û“‰)®IÕg.f̘aïêêj¹qㆠ@$~ØŸ\ü£õIÙ¥ØS2ýA¯·»á\§vocÅ£}Dëc͸ÄQ)ªÄž“c¢‡ õ÷<‰mNSºÖhÏ5FîÞVå°G‰)ÑW%ö©õ£éÀøÆœ{Žÿ*3• ܃ìºIEND®B`‚pureadmin-0.4/pixmaps/logo.png0000644000175000017500000002524710667602712013432 00000000000000‰PNG  IHDR VoKèbKGDÿÿÿ ½§“ pHYs  šœtIMEÕ  ;;øetEXtCommentCreated with The GIMPïd%n IDATxÚíyœÕ¹÷¿Õ]½Ì>0ÃÀ HƒÈ&‚W‡{ƒkÀ z‰ ÑÑÁe‚ãŠæš˜Ää¾Üø^½o•¨ÑQ'FI&‹îãôÞ¸ ## ³¯=½Vu½TWOMMUO7Ì0€õû|Χ»O>¿sNU=õœç<Ï)°aÆ 6lذaÆ 6lذaÆ 6† BªËË˳g3A»$`Ýúõë¿7RcÆáGJ¨¼¼Ü <œ;sæLF¢(`š‹Å×¾Çb±~ùáp˜}ûö ~a !6Ž^ˆ)–ûpî¢E‹¸òÊ+ÅTÿ–>Eá‹/¾àÞ{ïUº»»o-//ï]¿~ýÚ‘(6l =œƒ(//¿ øÁ„ ”5kÖn·Y–‰ÅbÃ’£FbêÔ©Â| D£ÑÅsæÌ nÛ¶­v¤ˆ C‹¤S°òòòo¿ÏÈÈàç?ÿ¹““ƒ,ËÚôhXàt:ñz½ìرƒûï¿_ ƒpãúõëé³aÃÆÐÁR*//ÿgài§Óé\»v­PXXH,# kƒ4[(ŠRRR"¼ÿþûŠ,ËKçÌ™óå¶mÛ>éA³aÃÆÐÀT•——û€×€ì›o¾Y8þøã…B òpB3Z‹¢È˜1c?~¼ðÁ‹Å–Ï™3çÛ¶mûd¤Ά ¨¼¼¼x(^¹r%‹-TᣭX h\.—‹qãÆQTT$|ôÑG(вbΜ9Û·mÛö÷‘<6lÌ–³~L^¼x1ßüæ7P(„,ˇ¼qÑhÇÃÂ… ‰D"Âã?îP¥xzDGÎÆQô™ªó’T—²œÝæƒìIÞ¼¼<ÊÊÊp:D"$I±ê…Ði§ÆK/½$455>$ƒcq²M ]Ànà=Táøª$Õ ÿ|õ‡(úž–Y~A’ê–tm Lzrrrp»ÝD£Q:;;Gºâtê50R‚xšTÛDÑwµ$Õ½?Ò;\!о"`I’"KDÑ7F’êZFº­6†I= £Ñ(½½½#ÝF Fº ébð?¢èûWIªûëH7æ0Å¥$¿Åx™_ŽtCm Rriîì줻»{DX\\ŒËåî!@ð'Qôù$©®c¤sbUŠelÇ‘jë±BJ(ÐÚÚ:" ,**:ìþ"EŸLFv}—ÎcâÇîévNEß,`n E牢ïDIª³]/ŽB¤Ô•——‡Çã9$ ëêê"ãõzç@’ê$àsàVQôE˜[ŽA¥»š‘NùÁÊŠ¢ïà*`0ˆIRhRœ œœ Lr€(°xÕàþ”$ÕEÓºT´}Ù”ƒ’EÑçŠ÷¯ u*œ 4ÿÜ/Iu֓¸.nˆkðð'àW’Tש«'øp 0p .`¼üB’êÚ´ i¶÷` p60»€ç{õm.¤%€œN'n·{¸Û€Ãá@Ž(³ s4c¤ Š>ê q~ e—÷Ç™vSâéBàŽ¸Á}sŠíp¢ÚvRE™(ú~ Iuƒú‚ˆ¢o"êÎ ó ‡Æ+•¢è»¸eÇUª(TgÅÓ*Qô-•¤º]¢è›lŒ'ÆÓ•¢è;G’ê>ªöY´ùGÀÒ_¸âã6¸Z}gKRÝÎál‡c8+ÿbŸE~îH7,ŽG1>ý¤¼(ún^Ä\ø˜áX൸f• ΊMòc€ÙS»õ)¢èËÞ` ð1â&Tá:T¸äÝñÀQôa0%IÙ±À&Qôe aûŒãô à¿H®€Lˆ·cX§‡½2Û_è0Æ‹üT-øÃÝÁË-òõ6­2à¿Ic³º8œÀ¢è;%…²åù§tþ£Ç/QoöTp]šýK†kS(3ØŠ:å Ç¡N‡ ÿžb¹é¨ÓÄaàè¸é'TZä§6r(b]Z€«Qã^ u§KDÑ—‹ú47ÃVàñÿL´(çEŸåuç°š®'3ü[ü¿VõNÃZÀnNˆ·ý†Ç‹þç@!ªì-Êhí¿'^v2`etš|xUSô‹€½åV g#†og±¯ âöŒÉÀ5À­ÅžO±ºá–ö!àtIªûT—÷6}Ù*̟л3%©NÓä€5¢èÃÀ'ä,Tç—,Úp1ªÖ?ª P7ÀË2Ï.~mQïe˜km[€‹%©Nî;EÑwꟊ¶– ^‘¤ºïÇ¿·‰¢ïÿ¯[”}C’êþ]WößwLÊÍ¢¶™ásà\Iª Ä׊¢ïf`“IÙTV*i  ÎÎÎCæ}8k^i„h´¢§SÁpk@„V!¿Ð =Öa®¢ kd5•Ú(Iu½¢èÛhQ®ktºEþ:ð@’êdQô­þp0ƒ©Ã£†ß;Ò(»Í¢\áµÍ ÷脆w-ÊŽÆv¤fr88NA8dIÏy#\"Iuí)–n©;ØÔc–Eþ«ùÛ-òšeŠ¢o ªºo†',¾ëñÏñ:Ìà³Èßb‘ÿö £•:Þ3üîHµ¬$Õ…PÝŒ6#4ª¡Þ«kt8Û1¸¤( EEEáõz‡u?h+Œd0ìAààjIªûÛH7ÄЦd°zÚÕ‰¢40É"¿óiÒ^`³î÷_ãy%†rªç§&uŒ²àlJ3ÿ@`¬+’¤lƒIÞ¡rÜc’I»–!@JÒ¤½½ŽŽŽÑFŽ=öØzi"t¢ÚJ¶¢j¯@4¼•âP=…Udq¶E¾Õô«ˆ¥(äÊ1@#Iª ~+V}‰kÁDp•PmÛ=˜#_+0n¨ÜP¢è[„ê/t°8N}¥&Þ̘kpc/-òmŒ0’ £ïͨQ£™0èìì$ ’™™yȼ¯1B¨K FŒŒ®øg¢6mÇ\M–¤º=éVf@*~<éÔe@u˜  S1@§ a{l ÒRýAÀét’ô5€Utï©ú¢èËB r=°Z¹úÁþ(Š>‡(úÎEßf“c^Ôå÷¡ÂÅñ:õ°r`\côKŠ»NÜ<„í±q€8ì+F-ìp^žO¡:ôñ€(úZQcÈ~Iê!‹Çµ@ž!ÿ*Qô£†/lE]1q¡ÆWÍA]_aÑPêòLò#@±Õ*¡(ú PÃ[Œ*p>j€ì“º¼àÇ ´£†º%ÊQƒCE C* Ã>ã(Æ3ù“P—ŽC¨Bè_UƒâÑÏVšÁRT ©u Z-rzp#Ö¬ã¤^Læ¢ ·ÒÊVÊÖ¿µ({!ª7z؉ê§dã0@JËðC¡u´··³eËB¡‘H—ËŘ1c(..fêÔ©‰è÷¯~ÜFj±Kw“züÎAA’êG”ß1õ‰¢ojð©žH¡Š'€3É?G}c%©N¿¾U㙚B½UX‡ÎØ8D8$w}cc#7n¤¸¸˜ÓO?%K–0oÞ<Âá0›7oæw¿ûuuu–ÿ?Ц] HR]uÚÒ¤˜ üX’ênM­Ö!kÛÿEõŠÞ•Æß"À1ذPƒ*ÍŒz­Xk7z¼È@£<¨Ï~›q î Ôém2<\?LÃg# ¤ejoo§½=U§Þ>ÔÖÖ"K—.%++ EQ³Ï>›`0È›o¾É믿N}}='žxâ‘îýœ2$©îÓøÎ€kPmSQ=OPc‰ÖIRÝöƒ 8˜¶½(о?£Æu- Æ¼i¶œNT‡¶P=¥_²×°Zýúc*›˜IR]T}@Ýèˬî{ å¿EßBÔ€ÛË€ÙômHV‹º9Øf€‘ð{±ÑîôòòòÎ &äÝyçôööÒÐÐ@[[mmm8Ž’$ñÖ[o‹Å¸îºëÈÌÌ$àp8p»Ý¸ÝnöìÙÃC=Ä”)S˜?~â¿3fÌÀáp0~üx~øÃÒÜÜÌúõë¿Rʆ£)i@àõzxæ¹sçRSSúuë¸á†ÈËË£··—`0H4¥¤¤„k®¹†û￟3Î8ƒ)SúB~´wƒ¥‹%\þMAç¼¼é7?±µaÃÆ HË$Iápø€’,Ë\|ñÅLš4‰{ÖÖV²³³q8H’D `òäÉœvÚilÚ´‰P(”H"€Î½àŠJ§Ãý¬ÛãùéÒ‹®zxíÚµ_;+· ‡;RÚLKÑhô€P8&²lÙ2fΜɽ÷ÞKGGGbÃyI’$‰³Ï>›ÆÆFöïßO$Iûͬk×®uœ{ÁÕëD·çÞò+Vy¾sÍjO~^Þå[w~ùÂE]4¬‘½6lØHCꈸwï^‚Á`Ò2‚ 0eÊ>þøcZZZÈÍíÛä.‰››KQQ[¶laÚ´iÌš5+å·b,_¾:sëÎ/7äçç-.[u™7'G­ûªŠŠŒ?ýá‹›…Ú3W”ŸýúÓëÛRªÐ† Ê´¦%²,ÓØØˆßïp¬³³Y–‰F£I“¦Õh¯~Ö‡_(Š‚Ãá`êÔ©ttt$ü…R‰ûæ·.+&C~oÒ1“¯¾vu†^°y<ÊÊË3¦?í¯èzùòK†s³'6l¤ˆ”4 I’¨¯¯§±±YVªóòò())¡  €Ï?ÿœ§žzŠ™3grÜqÇ1~üøA ³³³ ‡Ã8Î~†m§ÓIFFFZ«mK.(Ÿít¸^›?~Þ’s—¸£ò@çI§ÃÓ鄆ùó}íϧºIª 6† )EÃïÛ·††………ƒAºººØ¹s'ãÇgÆ œsÎ9¼õÖ[ôööR\\œ”4‹!Ë2ápQû ‡ÃËåJÙùð¬—Ïpâ;Ë–ëY°àdG0ÅøWAQøtçv|º3(­]»öPlþnÆAÒ¬¡¡ÇêU«8ùä“™6mH’ÄŽ;˜5k+V¬àöÛo§½½7ÞxƒXÌü—$‰—_~™P(Äœ9s–DQ¤±±±Ÿm(œ8'MžtLlÁ‚ù|I_ŠF‰F"D"a¢‘ím¼øÜóIŽ^úêsíK©b6l ;@===„B!<½½½„Bêfjùùù€ºY™¢(H’DNNßÿþ÷ikkãå—_NL×4„Ãaž{î9·ß~;EEEȲœØÿYÛù°¾¾ž1cÔ­]R‰ES”‘H˜p0L$& ‡ˆ„ÃÈ’Ä3Ï>”¥Øcyzý #=à6lØèà6 ¬¬,<ÝÝÝìܹ3!$º»U¯û¼¼<öïßO(¢«« ¯×Ë 7ÜÀÃ?̯ýkrssÉÊÊ"++‹ÆÆFrrr¸öÚkS;ÍÖ#¢("Ë2~¿?­¥w9#&É„Ã!@s¯ÇÅßÞÛ*755}©²ìý_lØ8Ì0¨ñãÇóÅ_°sçN ƒtww#Š"Ó§OçÝwß%âõz‘$‰ÌÌLÖ¬YÃþýûéîîN¼Î§¨¨ˆ¥K—êV«FCµ,Ëdeeñío›'Ÿ|’ÒÒÒ¤m[|ÑEÙ¢ ÞuÌĉ.YŽ„Ô·j ŠNZššxûß‘$%vþ_^¾?Œ 6+¤´ V\\Œßï§¥¥…¦&u÷ƒŒŒ &OžLQQùùùüãÿ`Ö¬YƒAdYFEJJJ¼nG[Š×/­ë§XÑh”SN9…p8ÌóÏ?ϼyó˜Ï¬¾¡ä0ƒeý)mH¦Áív3qâÀï,XÀŽ;Ø´i—^z)²,X3D‚  ( Á`––¼^/ûöí£¸¸—ËÅÒ¥K ‡Ã<ôÐCüä'?aÔ¨Q(ŠBwØÉŒã§ž|þ²³=mx½þøÔ³‘–Ö¶G_Úð˜Ù¶ _gñäÐ}×òõ7«Bß›YäuBF=´úb¸€L’U?†šÃØ—¡äÐçûa¿t8Œ\Éúa%˜Òá0ë Ò! ÅåË—SSSƒÛífåÊ•VÁôåµç%IJ¬²M™2…žžZ[[ñx<¸\..¸àÂá0?ûÙϸí¶ÛøªÅÏ”)Çrá·Îõ´´u“•Éžz6ÒØÔRm Ÿ~Ð ê¦`]ÒÓ%Y÷Ýx$ãtõ;u¼É8”àp8´¤¯Ë¬©p`GŽØAririr£Ðsè<¤Éa¬ßŒCÏ3 þ;ÕÍ™3ç¹¹¹Þ3Ï<“H$BWW© 33ŸÏÇ«¯¾ÊÖ­[™4iEEEˆ¢˜Xb×RWW›7oÆï÷sÌ1Ç$–ø#‘ãÆÃívÓÚÚJff&‡Y³fQ__Ï#OŠº¥juãv!žg5%3 fBM OëÑ8"qŽhœ;U½Ó8´ \Ñqèy´}\Rápê8ôÂÁÈ¡¯hü˜ÞgÄŠÃxN´¤ í¿±x}6Nò èúa@zcäÐ'm¬„A8ôãejèê‘-êOôaÈ_Ëãõz9ýôÓY°`»ví¢¡¡íÛ·ãv»ÉÈÈ °°k®¹†üü|vìØÁ}÷ÝÇš5k˜={6&L ¡¡ææfÆŒƒ 466òô‹o°¯©…+.»î?y9YüþÉgß×ï~â忱7íq¡nñš d–VT½‚¹j¬ÔVW.§Oh@Ÿp²z›ª@ßEž¡¥ÒŠª_êGû¬­®¬D}›†QÓJÆ¡]èÞxÊ(­¨ú©Yâý¸ÃÐH>}Ñs$4ÄÒŠªJú¦@Ь~c2VrŠ í­´¢j§q «­®|•¾Z?NÉ8´óžÔ¥Us“ŒÕTAšÌþdÅ‘¢¥UEIúÑÅ@M(!„’nÉê÷ûÙ³Çú…˜šv¤9ê';¦ýV…;vðâ‹/rË-·0sæLB¡MMMx½^ÆŒÃ}Uóyý^®^µ’Þ@ˆ¬L/Üð<_Ôïú"ÛZSScÇuõÁxf ¾§=§´¢êe,.Dú.È@Ћ*("ô·Ù˜qx, »´¢ª:Iý±8Ç ñú{Q5.í ¯8‡Uˆf•VTý'æ.ÑÆÚêÊ»t}Ð8ä$š—*¨¿£«×ÌŽ!×VWþ6^U£“’p8è›jiBô_“œM`¿®ëC„>ÑŠC{ xo\ø˜Õ­?çÚëŠÂ&çÛÈ¡è¸Q…苺õÛ¯«?ªçHkC2cŠÅbÄb±„Ca4Ml©‹Å;:5FK’p8‰ÍÍfÏžÍÒ¥K¹÷Þ{Ù¹s'‡¢¢"B¡<²žÏvíáÊË/& “•éeã3/QQ¡´¢ê2ú¦œ"Ö«MfË cc¥´¢êtùHfSÑsè5Ÿ¤(­¨šFÿ©Z2›ÞöãŽk>Z?”$Yºqê·€T fÿÑÓéDdYF–åÄÞ>²,'V¼´x§Ó‰Ãá@–eEÁét2sæLÎ<óLî¹ç>ûì3¼^/¯¿õ7>ÙùW^~‘¨D†×Æg^¢ `7¬¾œï}ï{®Q£F]qÙe—Ùû=÷Áhkð”VT½fQFopL\@¥UO3ðÆ’p¸K+ªÖ뎙]ŒýòJ+ªH‘C±ßÉÀ©‚%J+ª~ÀàÆo#Çõº¶Z•×s”Óß2¨*­¨:ßpÌl¬ôgÐ_aÁ!è8N6k¯U^iE•ÁøýÎ{iEÕ¸$õ JiEU&ýWbHßÒÞš¿ö¶ I’  $ö}ÖOµ²±X ­oæƒRÁ~rׯxðÑõÔ¾û«.!Sðz\l|öÏäçårñùß$“——Ç­·ÞêÊÉɹ¥¬¬ì‡Ó£ zUÙMò'³ñ?Zžf¨6®”—y5u<™P°z¢êWK’qh‚Î VZŠ ãÐ÷Ã,9¬V‚U+§×­üˆ’õC_ÎJ¨:“pèÇJãI¶šeæ—£w£0Ök¼N43X9Š &‰9`hÓ0M2›‚ ‚@Ñh´ßtí«f?åwü™žÞÉ—Ý.zÅ"þ<Ž?mÞÃw®¸ÁáÀíÙôÜŸÉÏÍâÆÕ—ãõzééé!SPPÀ­·Þ*feeÝQVVf¯„™ûËèéaæì¦ý6»àB Z½fùƒ-ËWÌŽ›ÁØ3 Ëj̬ê3ãÔxR©_ûtòŒÎ€Æ›Á¢~=‡•c¡‚ù¹4ë‡Õ97ó÷1ûnö{Àù>(6åÒ„Š¦ÕhS.I’S0ý1AØÛÔÃy—c-áºò%ÜZþ Î^4‹ó–”"yDzþ•:D§“§Ÿ{…üÜlV®XŠßï'33—ËEww7¡Pˆ±cÇróÍ7;½^ïeee—ÖŸ£VOH͉ÍìƒùÓXÝfÂÎê¢Mvóšõ#YŸ“dåÿµjwºíЧÁÂ!Ò##‡YV}:}]Jõ%Ž”¤7Bí:@¿½~4ät:éè ñ‹§êX0w:3¦M¡£7LTŠáDèJ”.œÍ‡Ÿ·ó£û^Âã¹þ;—“““C0¤§§·ÛÓéÄï÷ ™8q"7Þx£Ãív¯/++[v0}:‚aöô1®^a¥±¤f`f/1>“ÝtF¾t6åK'¼ fQG²¼txÌ<¦­4 3­+Õs‘j[ŒßSù¯‡ÕCgPþƒ@šÀÑÛ€Ì4 h4Š,ËD¤?zd S=†c-a_[/ßÓÁúW?cÛ®Úº‚t",,c0!f+c}Én&ãÒ{²~hN~É`vÜê\˜µSïèg&Œ­Î‡qœ¬Îù`~Bƒµ­_ýŽ*±„~eËÊ­Ù€dY&‘øÑCo’™•ÃìYÓØßÖK4*•d‚¡QIF’$Z»‚( ŽÎ£`Âtî¾ûnöïßÇã!###ñÂBmêLŸ>+®¸Bt¹\/•••œj?Ž2èC$q¥ódÒ`æÿc¼85oÚ(/´Á´…þžÐÉ84oÚÁ¦_fÂNóÍ1õ{2á°£dchôÿ1»QýH¦a™9 ‡~¬ô„ÁÆÇ¨› k³‡ÙCÇJ¸§j:F”Ö{—5[qeK[†×VÁœN'þ`„{Ÿþœv¿Ì?-˜Mc{€p$š:- 4ïþ„`À‹!Ë=þ‹OÃI'ĺuëhiiÁãñàv»¯÷Ñ„P(¢··—Y³f +W®ôº\®×ËÊÊNH§?Gô7UoYõ™JÌaå;3qgDÍéÍìé®×J$ R[]¹*…v%øk«+oÄÚ±ÎØãö$uè[muåÿÃ\ÈëÐsü*Åqâýø-}Žuò 2­­®|óÖèô§7èï¼g5¾ŠŽckŠ}ÕQ°ŽÂÚŠ#HµÕ•fãnèK"¯¶º²—Âý¬ònÀ“Nì—¶ ¯lú Ahí ò‹õx³G±è´y4v…Uáã¡«åKºš÷"É2R$BA®›Ý{™<.›™SF³hÑ"¾ño°nÝ:ÚÚÚÈÈÈHLë´•6PWÖü~?óçÏÎ?ÿülQß,++›’r‡Ž$.DTïÓÀÛ­>G‰¸ôÇM…Pmuå@€¾X­TnÜ0¬­®¼*~,Ù* qá£÷6›þèû¡çø«z ÿMŸ'w*(1^µÕ•“ÂÒx\øècÚ”48´½É­lpÇ_éïelÊÚ/æ®¶ºòCR@muåg |àXA¯ÉEj«+›-Êõ3vÇ…ÙC-á ­¹V»Hc ¦_†×Æå7š ÿIDAT¦YúU0Y–ùìËÊ~²‰’IÇpÊÂÙ4¶ …£8(ÌuÓ°·žÎæ¯ÀáÆ•1Š¢ÂQôöù²¡…[.ž“àºð Y´hëÖ­£½½¯×›Ðº´©ŸÆÙÛÛË©§žêX²dI¾Óé|«¬¬¬8Õ>áЫâÚüo¯¿úœPã(w,ì´¤ý¯¶ºò<Ô0 Mé…ƒ•®çè­­®¼k#%µÕ•×Ñ?Ì#e 5¡·¶ºò'†zî¿âíÑÂä8dG ¶ºò!«úã30Ì#‡ñ¡¬­®Löf:¥¶ºò5úu„ÓH«~$Æ«¶ºòNƒ´O¥¶ºr'ýC$¬¶b1NYµ©w¸¶º² ëi¥R[]ÙÍÀàcEß ~Ák—_~ù®‰'æÜyçôôô°{÷nËQjjjBN9åZ[[©­­¥¤¤„yóæñÞÖøÍ ŸðþAN[x"%%ãÙßÚK$¥0ÏƒË [?ØNwÛ>AÄ]@qñ8bR”mŸÖóÝ‹çrê‰}ΖӧOà†n@Enºé&²³³ jGâñgšÍ Ômc_yåióæÍ_H’ôO555íý0z* ¯Ý|úhx- ÛÊ€kôT¶Š†×  7‹†O…#•hxIÇ1 îhýxé#âõf ³hxcœ™‡ñœ·)7¸þs0tý°Š†×` ¯×F“qh4ü€s¡Å±ŠÉ±„j¡Ù€´eøÿÑÄm~HfV+–-Dpºhhö“›édÌØ<¢’Äÿlùî¶}ÄpàÎÍØqãˆE£lß¹›ï]r g™ræääÐÜÜÌ<½þúë]‰ î5›”(Š‚@OOgu– …&¿óÎ;¯—••ýsMM?>Ð.Y÷[¯éõÇô{2Á çÐþ«•Ó8̶xC(Gdã •  ÔVO²ÕB#‡ñœ94èÉVFt3m%KßX z»L²1­8dRß„nÀ¹Ì‹3)´^[ †"¬µž«ïxš™3§qö§–B¦ŒÍdú1y„#QjßûT> ¸³ (;!&ñÉß¿à?Wÿ §ž˜|Æ$MMMO=øàƒÑ@ €ÛíNØ›E!‰$lP~¿Ÿ¥K—ºæÎ;Óét¾\VVæ=¾a`(FÕn‚€?žztßõS–Á„‘#f¡E»kõ÷!G8^O@Ç£¯_Ó®RY‚7Ž•~ß"­/]ÒO‰ÓJ¬ú¡çëx´:8Óó„ õë è©lÇ«çÐ?¸ôï¼ó”Ç{ì«®ºÊåv»†é½{÷RPP@4¥¾¾ž“N:‰SO=•ÚÚÚ˯‹‚ƒ»)¿®ÃÉs¨9†‹ë ëÓæW2ê¼ @nnnæÆoL«¢¶Žéx=n¼nÓ&ä‰J¼øî^ö·ù‰J2M{ˆ„ƒˆÞ\¼9Eæe°óï»q„šÙöÆãÜøÆãév<Dº»»CŠ¢\ÖÔÔä|â‰'V”——»<===D"fΜI0äwÞ¡··—)S¦8ßyçS†øDذaã 7ðÄ€$I×:Îï‚¢(Žøgb>¬ûÞ/ß딎mëèñ†dÞª'Qýs¢’L°§ g3Nw6bæhFåeÓÞÑCggGtvf}}$¢ô³=‚ Šö©ÿ.‚‰D~jŒJMM eee—îÛ·ïÉššše—^z©;33“ÜÜ\^{MÝ+??§ÓIww7Š¢|5ÒoÆäáòú×…è_¢}ê×ÿãÝxŸɾÕçžõOÞ¯Zz †ã±]Ñ(Í{v  àÌÈ'3;q£³ÙòÞ'ÑöÝï}·íã ïÒg‰×'3?ÍgE³gôÛâ`âĉââÅ‹ÿ0yòä³W®\éŽÅb´µµ!‚À<ñûý·ÔÔÔ<8ÒƒoÃÆ×Î$ÇôjzŸ½ƒTâ5(æºÜã\(8ÙÇŒ%tùCD"=-DB½83òpzr(.Èe÷ÞýÑöÖÖ-[z˜¾eÁ0}ËZž¶\« u¯ß³ÔÝÝY__ÿʘ1cæ|öÙgÇ:ÆOff&MMM<ùä“‘®®®¿)ŠrýöíÛGzìmØøÚ#]ÿÍ›SÿN#mDZ`Ö·NÈ-Y°é¤ÙÓ2Ç+¾l­™h4‚Ó›Oa^|´#Òöé³Ëzö¼³>á5$…þ/½s1ЃԸ«^ NglÉ’%—5êJQóâ!ÑH$²îÃ?¼ûóÏ?ï¢Ï½Ý† #„r@ÔÁøVDר…W/È(œºqÆ´÷¤ EBw L Æårã`ë;¢½m{ïØÿö¯þDïXMÅøa½û½ñ»Æ¯`òbº¹s玗eÙßÐа¿½½Ý¯;Ä@6lŒ(Féc[Dý÷¢“¯˜ŸU4푬¬ŒÑ£s½^¯Ð݈´´¶ þÖ=wíûÁ'éÓ|$“ï1]ý0ðõ²zíG?Ô{´šM5×û”kÆ0höé5)³àÄßrz²ç9œî)Ôõ·pÇž·[?Þ°q5ú¸ý§¦éû¿éï±jtª4‹m²aÃÆa‚ƒ@ZÆU1§Qz>cˆ€Qi‚Æ G1†B¡:‚á»Þu[wc¶‡± 6lذaÆ 6leøÿPnT—é¶—IEND®B`‚pureadmin-0.4/pixmaps/pureadmin-16x16.png0000644000175000017500000000137510667602712015235 00000000000000‰PNG  IHDRóÿa pHYs  ÒÝ~ütIMEÕ !yÛœø>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3ïXRIDAT8Ë…’ÍNSA†ŸÒÃOù-œJJaÑ0ÊO¬là bÔäÜ„ ¼Ù{„È‚ 0.\IPë¦iIˆ•ŠUh©@gÚÓsÎç´RÀð­&óÍód¾yÇGmݳ,+Á µ¼¼< |æXÄu]q]WÇ۶ŶmÑZ‹ÖZ666IJ,fjh˲¤T*ÕÀ× ”R’Ëå*Œ‹ŸÏÇÚÚÚM0==]]—›J)FGGÿ Çãq´Öÿ–eE§•@ €ÖADð<ÁuÝ¿€aày^eìWÆÂ‹‹‹ vwwª¥ õõ4Ô7TE¶m377{nTÀJMMMUUàTê ŽëÒÛÛK0¤T*ÑÙ³¾‹),--±ººJ:¦¿¿ŸPÈD)EæçFFFØÙIÑÕi2<<ÄÚú[‰Ä‹ºË´¿¿Ïàà Éd’“|Ž–Öf†‡ïÒÞÚF¤'ÌÙÙ)É­?lònýýBM "ÂÀÀ±XŒùùyÎÎN9<<ÀoøÉfÑJs”=âÁP­‹|ÚŒ©+1NLL0>>ŽˆÐÔÔDcsdÃgã/æé‹ô±·÷º:€ÿÊŽãày™L†l^ñòuœ¼rØÜÎq¤”2†ß ÜæÑ“‡½Æÿ>Ìññ1o¶ÒôG:8ù}J[K€ ÙIG‡`—ŠLG£lmw=«¹A>ŸÇ4MLÓdllŒ_'ED„BÙ@mf&ï0r”pO„¯)<Ïëºãc`å¢pϹMc{7öy–nùFÀ_®öÌPçó[Ý¡•?«[L\âm…IEND®B`‚pureadmin-0.4/pixmaps/userconfig.png0000644000175000017500000000421010667602712014621 00000000000000‰PNG  IHDR @ÈbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÓ Œ„IDATxœ—ypUÕÇ?wyïå½¼5,a ₲)Ø6–V¢£e¦£N2•±Î8mmÇþQíP;Ð?œVEꌂmµ.ãhÑŠA6Ã’“@Hà%ïe}û»Ë9ýãÝ'‘J„ž™ß̽sîù~~¿³üÎï*\yÓZ Ìyz ÿ‡Þe5 XY]WupÁóåìųdEmÅ!` Pêô+—#¤^!¸Øbæ’ gŒ± k1ð0(¹øå6˜wÃ’¹ýéM²±q†t¹u íÛ@…È]ß×/63ŠüÁ[h¶m Õí¥¢<ÌëÛ¥éîÍ‘gÅÕ•„¼âEäÉæ­}tpðÑÓQ³0)¬»ü:áñZx¡fÚÌÛ—ßr;}½´·dR@²fÅb\.Á¢FË–NCQUÌô0m­_ðê›GßÞõ~ü·£V‹·/†ñ-«–#!ÿíµÕùðÐo=E&• IexúkYÚB aåÐt³ªƒÜ±8Ø<ù‹˜¸×¤Å—%+S|t<Çþë“Ø—VfM›¤Î›UËÍ˲vùÞù.;ßú€‡ï]ÇáãÇñ¨U4Î]ˆª)hJRS™\ã" ƒ 'Ï<%Ïý×dè¶a»Šþ’‚%´ñÀ‰DFé>‹HÉÕËB¬Y±˜€¿„3½1îºu%K,bÇëÇÛö…QƒþX/[?Š·<Ô!{2É3?28®ù ¥$†_Ù;.øk¯«^»rÉKÍM×ðÆûŸR_WÂ9udòy¢±!ºÎöS?c2ÍM×°ëí=ÌÙ@*WÎßÞ;ÁŸE·gó¢Èlƒ–z|»æÈ+ø6H|ãžãÞf»<ñåÎ[W ù9{.Ž·M!þBœ7©¯«!âþ;×àñ¸hëêáÄ™ôÞLNôS8Ó*À=¤2&¾Þ£lº4ØX{÷‰Fy]2›#ì/Åãv!¤Ä4-ª³–hÓ±–u%ò£k¶-H§s ŽØ­9Cd)¤Ñb*•>:ãP… ÷«›K>®"ͫɇ«2ÆêMÇ3åî¼Å_[:YÕtA¿––vŽwtP¾¾‡ SGxïðsìûüZîúî·pé*GÚZéʶݧ‡Áá ïÀ¥Å†*0j%摯®ñ¯ÖÝ„Âv¤+òä'¥î[þòAx²•£$›!Þeðä)ÊÏÅÇy>Í$¨«—”Uf1d ‹Ýñ6LO;þú Ö(=äøÈnæZÙDíàºOÁóÄ…ˆåö&„ñ{¤;A~äÁu‡‡6æí)!Ua¾‘Bö¥²ê4•ø!0«=ˆÅyü•Qz­(¶ÅðrŠU ³ pÿE ü~Ƚ ù3…5¯Í…ÀfW <ë)ýåÝ–v,o1d „[‚%Á’’Ò€›¥..•¼[S@: ‚0Ó½¥¸ Ê:…ìç›Ëìç!Pe;U¼:Ö'A¤ùÒ®–ãZß hR¢Œ˜’ˆV€I`Ô¡‰LœàF=9ˆ! o‚fT ¹Ñ«N@ÑSHÒ q­áêé/óÀ6­Ê ³ÙËÆ·©¢–Ì„À=ÜŠZr®x†AÔTÅÙšN¦•.7Òå¹xu°U0%dóÅY]êÜœ_Vù'yÈOõÔ(Öï¼l|õÂ0š òˆý(sLœ‹£{ht‡j[+U-@")°„ýå]hJP%YpÂÂB ›‡Ž>È÷ߙēÞá­ÙòOÆ\J:Ò¿E=†íc7øŠ-/þûÐ5Y d;S­) 2ŸÅH0ýg×á‹Ä_Þ↉§Y¾g³;9%ZÚ6óͽ<:L«¯#C¯!´ç0´fúíTj–Ó'^i¾MööÑØ×GC,F$•ÄH¦0L‰-¾Òr*¦~á/–ctÀ û®§vtQW;OÍßÈÛ}Ïpž¾¦Ó±Ü'1h#«Vµ¬·»§_ÑJ-Ó.Õ45è.qa™6Ùtq>ÖÙÞŸ~“$û‡»mm{,o XÕvòãøáý¯°ûŒ×D!`ĉÞ*‚/Uì)Îl€Úis¦Ü4uΔŸ#þÉ©Ñtôüé¾½ÑcéDæ,LT”±”ä8$<ô9p£¸ÖãU™à£ð«R9iZå|U×*2É Cý#î»$pžUÀK¡¨W‡†€80¤/'âbŸËvÞ5 fÔgïKÆ€ DZ$-Œ_eJÇì3 çxíuÀ…u+Šõ\ØrfâËBà⨾©©Ž¹s;ã„[°¿-ö‹1}W ¾Ø¢°¼H¸¨7Vó’¿­ÿßÀ0ð °ÊIEND®B`‚pureadmin-0.4/pureadmin.desktop0000644000175000017500000000157510670523442013654 00000000000000[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=PureAdmin Comment=Administer and monitor your FTP server Comment[bg]=ÐдминиÑтрирайте и наблюдавайте ÑÐ²Ð¾Ñ FTP Ñървър Comment[cs]=Správa a sledování vaÅ¡eho FTP serveru Comment[fr]=Administre et suveille votre serveur FTP Comment[ru]=ÐдминиÑтрирование и мониторинг вашего FTP Ñервера Comment[sv]=Administrera och övervaka din ftpserver Comment[tr]=FTP Sunucunuzu yönetin ve izleyin GenericName=FTP Administration GenericName[bg]=FTP ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ GenericName[cs]=Správa FTP GenericName[fr]=Administration du FTP GenericName[ru]=ÐдминиÑтрирование FTP GenericName[sv]=FTP-administration GenericName[tr]=FTP Yönetimi Exec=pureadmin Icon=pureadmin StartupNotify=true Terminal=false Type=Application Categories=GTK;Application;System; pureadmin-0.4/ChangeLog0000644000175000017500000000470010670523356012044 000000000000002007-09-08 Isak Savo * src/*: Fix warnings * configure.in: Bump version to 0.4 * PureAdmin.anjuta: Update project file to latest stable Anjuta version 2007-09-05 Isak Savo * src/cfg.c (cfg_fill_missing): Fix possible crash when iterating over static array. Add pure-ftpd-mysql as valid startup script. 2006-07-22 Isak Savo * src/srv_comm.c (srv_try_get_activities): Improved error message when ftp activities are temporarily unavailable 2006-07-19 isak * system_accounts.[ch],prereq_usermanager.[ch], src/*: Improve first time creation of system accounts, default home directory and password file. * helper.[ch]: Moved system account related functions to a separate file. 2006-07-14 Isak Savo * autogen.sh: Added version checks for automake, autoconf and aclocal 2006-05-29 Isak Savo * src/cfg.c (cfg_read_settings): Save and restore the state of the "Show Advanced Info" checkbox 2006-05-27 Isak Savo * src/gui_helper.c (gui_update_info_frame): Added progress bar to show progress of downloads 2006-05-26 Isak Savo * src/mainwin_cb.c (menu_connections_cb): Added connection menu containing close/disconnect menu items. * src/srv_comm.c (_list_generate_unique_id): Changed ID to be generated from the activity info instead of randomly. This ensures that an activity will get the same ID the next time it is added to the list. * src/gui_helper.c (show_not_yet_implemented): Useful function while developing... * src/main.c (get_ftp_runmode): Made the function determinening whether pure-ftpd is running more reliable by checking /proc directly instead of relying upon the (not always available) pid-file. 2006-05-25 Isak Savo * src/main.c (main): Print path debugging information from binreloc. Don't rely on gcc's constructor attribute anymore. Don't print debugging if PUREADMIN_DEBUG=0 * configure.in: Removed the --enable-debug flag to configure since pureadmin now handles this dynamically at runtime (env var PUREADMIN_DEBUG=1) Added --enable-developer to enable useful developer compiler flags and remove optimizations 2006-05-23 Isak Savo * src/main.c: Added functionality to recover from not being able to get activities 2006-xx-xx Isak Savo * po/: Updated fr, cs and tr pureadmin-0.4/configure.in0000644000175000017500000000507610670523010012575 00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT(configure.in) AM_INIT_AUTOMAKE(pureadmin, 0.4) AM_MAINTAINER_MODE AC_PROG_INTLTOOL([0.31]) AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC AC_HEADER_STDC AC_CHECK_LIB(crypt, crypt) AC_CHECK_LIB(fam, FAMOpen2) AC_CHECK_LIB(dl, dlopen) AM_BINRELOC pkg_modules="gtk+-2.0, gthread-2.0, libglade-2.0" PKG_CHECK_MODULES(GTK, [$pkg_modules]) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) GETTEXT_PACKAGE=pureadmin dnl AC_DEFINE(GETTEXT_PACKAGE,"pureadmin",[Gettext package-name]) AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext Package]) dnl Add the languages which your application supports here. ALL_LINGUAS="bg cs fr it ru sv tr" AM_GLIB_GNU_GETTEXT dnl Some configure-argument set features: AC_SUBST(ENABLE_DEBUG) dnl AC_ARG_ENABLE(debug, dnl AC_HELP_STRING([--enable-debug],[Enable debugging output in PureAdmin (default is no)]), dnl AC_DEFINE(ENABLE_DEBUG, 1, [Define this to enable debugging]) dnl ) dnl Check for developer build developer=no AC_ARG_ENABLE(developer, [ --enable-developer Turn on developer warnings and debugging (default=no)], [if test "x$enable_developer" = xyes; then developer=yes; fi]) dnl Set extra CFLAGS for developers if test "x$developer" != xno; then AC_PROG_CC_FLAG([-ggdb3]) if test x"$ac_cv_prog_cc__gstabs" = xyes; then CFLAGS="${CFLAGS} -gstabs" else if test x"$ac_cv_prog_cc_g" = xyes; then CFLAGS="${CFLAGS} -g" fi fi AC_PROG_CC_FLAG([-Wshadow]) if test x"$ac_cv_prog_cc__wshadow" = xyes; then CFLAGS="${CFLAGS} -Wshadow" fi AC_PROG_CC_FLAG([-Wpointer-arith]) if test x"$ac_cv_prog_cc__wpointer_arith" = xyes; then CFLAGS="${CFLAGS} -Wpointer-arith" fi AC_PROG_CC_FLAG([-Wfloat-equal]) if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wfloat-equal" fi AC_PROG_CC_FLAG([-Wsign-compare]) if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wsign-compare" fi AC_PROG_CC_FLAG([-Wmissing-noreturn]) if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wmissing-noreturn" fi AC_PROG_CC_FLAG([-Wcast-align]) if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wcast-align" fi CFLAGS="${CFLAGS} -O0 -DDEVELOPER" fi AC_OUTPUT([ Makefile autopackage/pureadmin.apspec src/Makefile po/Makefile.in ]) echo echo "Configure results:" echo " FAM/Gamin support: $ac_cv_lib_fam_FAMOpen2" echo " Binreloc support: $br_cv_binreloc" echo " Developer build: $developer" echopureadmin-0.4/acinclude.m40000644000175000017500000000437010667602725012472 00000000000000# Check for binary relocation support. # Written by Hongli Lai # http://autopackage.org/ AC_DEFUN([AM_BINRELOC], [ AC_ARG_ENABLE(binreloc, [ --enable-binreloc compile with binary relocation support (default=enable when available)], enable_binreloc=$enableval,enable_binreloc=auto) BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then AC_CHECK_FILE([/proc/self/maps]) AC_CACHE_CHECK([whether everything is installed to the same prefix], [br_cv_valid_prefixes], [ # datarootdir variables was introduced with autoconf-2.60 if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ \( "$datadir" = '${prefix}/share' -o \( "$datadir" = '${datarootdir}' -a "$datarootdir" = '${prefix}/share' \) \) -a \ "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi ]) fi AC_CACHE_CHECK([whether binary relocation support should be enabled], [br_cv_binreloc], [if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi]) if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?]) fi AC_SUBST(BINRELOC_CFLAGS) AC_SUBST(BINRELOC_LIBS) ]) #dnl Macro taken from samba's aclocal.m4 dnl AC_PROG_CC_FLAG(flag) AC_DEFUN([AC_PROG_CC_FLAG], [AC_CACHE_CHECK(whether ${CC-cc} accepts $1, [ac_cv_prog_cc_]translit([$1], [-A-Z ], [_a-z_]), [ ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} $1" AC_RUN_IFELSE([AC_LANG_PROGRAM([],[])], [ac_cv_prog_cc_]translit([$1], [-A-Z ], [_a-z_])[=yes], [ac_cv_prog_cc_]translit([$1], [-A-Z ], [_a-z_])[=no]) CFLAGS="${ac_save_CFLAGS}" ])]) pureadmin-0.4/intltool-merge.in0000644000175000017500000010714110670523033013556 00000000000000#!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Merger # # Copyright (C) 2000, 2003 Free Software Foundation. # Copyright (C) 2000, 2001 Eazel, Inc # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Maciej Stachowiak # Kenneth Christiansen # Darin Adler # # Proper XML UTF-8'ification written by Cyrille Chepelov # ## Release information my $PROGRAM = "intltool-merge"; my $PACKAGE = "intltool"; my $VERSION = "0.35.5"; ## Loaded modules use strict; use Getopt::Long; use Text::Wrap; use File::Basename; my $must_end_tag = -1; my $last_depth = -1; my $translation_depth = -1; my @tag_stack = (); my @entered_tag = (); my @translation_strings = (); my $leading_space = ""; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $BA_STYLE_ARG = 0; my $XML_STYLE_ARG = 0; my $KEYS_STYLE_ARG = 0; my $DESKTOP_STYLE_ARG = 0; my $SCHEMAS_STYLE_ARG = 0; my $RFC822DEB_STYLE_ARG = 0; my $QUOTED_STYLE_ARG = 0; my $QUIET_ARG = 0; my $PASS_THROUGH_ARG = 0; my $UTF8_ARG = 0; my $MULTIPLE_OUTPUT = 0; my $cache_file; ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "quiet|q" => \$QUIET_ARG, "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility "ba-style|b" => \$BA_STYLE_ARG, "xml-style|x" => \$XML_STYLE_ARG, "keys-style|k" => \$KEYS_STYLE_ARG, "desktop-style|d" => \$DESKTOP_STYLE_ARG, "schemas-style|s" => \$SCHEMAS_STYLE_ARG, "rfc822deb-style|r" => \$RFC822DEB_STYLE_ARG, "quoted-style" => \$QUOTED_STYLE_ARG, "pass-through|p" => \$PASS_THROUGH_ARG, "utf8|u" => \$UTF8_ARG, "multiple-output|m" => \$MULTIPLE_OUTPUT, "cache|c=s" => \$cache_file ) or &error; my $PO_DIR; my $FILE; my $OUTFILE; my %po_files_by_lang = (); my %translations = (); my $iconv = $ENV{"ICONV"} || $ENV{"INTLTOOL_ICONV"} || "@INTLTOOL_ICONV@"; my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); # Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; # XML quoted string contents my $q = "[^\\\"]*"; ## Check for options. if ($VERSION_ARG) { &print_version; } elsif ($HELP_ARG) { &print_help; } elsif ($BA_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &ba_merge_translations; &finalize; } elsif ($XML_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &xml_merge_output; &finalize; } elsif ($KEYS_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &keys_merge_translations; &finalize; } elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &desktop_merge_translations; &finalize; } elsif ($SCHEMAS_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &schemas_merge_translations; &finalize; } elsif ($RFC822DEB_STYLE_ARG && @ARGV > 2) { &preparation; &print_message; &rfc822deb_merge_translations; &finalize; } elsif ($QUOTED_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; "ed_merge_translations; &finalize; } else { &print_help; } exit; ## Sub for printing release information sub print_version { print <<_EOF_; ${PROGRAM} (${PACKAGE}) ${VERSION} Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen. Copyright (C) 2000-2003 Free Software Foundation, Inc. Copyright (C) 2000-2001 Eazel, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. _EOF_ exit; } ## Sub for printing usage information sub print_help { print <<_EOF_; Usage: ${PROGRAM} [OPTION]... PO_DIRECTORY FILENAME OUTPUT_FILE Generates an output file that includes some localized attributes from an untranslated source file. Mandatory options: (exactly one must be specified) -b, --ba-style includes translations in the bonobo-activation style -d, --desktop-style includes translations in the desktop style -k, --keys-style includes translations in the keys style -s, --schemas-style includes translations in the schemas style -r, --rfc822deb-style includes translations in the RFC822 style --quoted-style includes translations in the quoted string style -x, --xml-style includes translations in the standard xml style Other options: -u, --utf8 convert all strings to UTF-8 before merging (default for everything except RFC822 style) -p, --pass-through deprecated, does nothing and issues a warning -m, --multiple-output output one localized file per locale, instead of a single file containing all localized elements -c, --cache=FILE specify cache file name (usually \$top_builddir/po/.intltool-merge-cache) -q, --quiet suppress most messages --help display this help and exit --version output version information and exit Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") or send email to . _EOF_ exit; } ## Sub for printing error messages sub print_error { print STDERR "Try `${PROGRAM} --help' for more information.\n"; exit; } sub print_message { print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG; } sub preparation { $PO_DIR = $ARGV[0]; $FILE = $ARGV[1]; $OUTFILE = $ARGV[2]; &gather_po_files; &get_translation_database; } # General-purpose code for looking up translations in .po files sub po_file2lang { my ($tmp) = @_; $tmp =~ s/^.*\/(.*)\.po$/$1/; return $tmp; } sub gather_po_files { for my $po_file (glob "$PO_DIR/*.po") { $po_files_by_lang{po_file2lang($po_file)} = $po_file; } } sub get_local_charset { my ($encoding) = @_; my $alias_file = $ENV{"G_CHARSET_ALIAS"} || "@INTLTOOL_LIBDIR@/charset.alias"; # seek character encoding aliases in charset.alias (glib) if (open CHARSET_ALIAS, $alias_file) { while () { next if /^\#/; return $1 if (/^\s*([-._a-zA-Z0-9]+)\s+$encoding\b/i) } close CHARSET_ALIAS; } # if not found, return input string return $encoding; } sub get_po_encoding { my ($in_po_file) = @_; my $encoding = ""; open IN_PO_FILE, $in_po_file or die; while () { ## example: "Content-Type: text/plain; charset=ISO-8859-1\n" if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) { $encoding = $1; last; } } close IN_PO_FILE; if (!$encoding) { print STDERR "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n" unless $QUIET_ARG; $encoding = "ISO-8859-1"; } system ("$iconv -f $encoding -t UTF-8 <$devnull 2>$devnull"); if ($?) { $encoding = get_local_charset($encoding); } return $encoding } sub utf8_sanity_check { print STDERR "Warning: option --pass-through has been removed.\n" if $PASS_THROUGH_ARG; $UTF8_ARG = 1; } sub get_translation_database { if ($cache_file) { &get_cached_translation_database; } else { &create_translation_database; } } sub get_newest_po_age { my $newest_age; foreach my $file (values %po_files_by_lang) { my $file_age = -M $file; $newest_age = $file_age if !$newest_age || $file_age < $newest_age; } $newest_age = 0 if !$newest_age; return $newest_age; } sub create_cache { print "Generating and caching the translation database\n" unless $QUIET_ARG; &create_translation_database; open CACHE, ">$cache_file" || die; print CACHE join "\x01", %translations; close CACHE; } sub load_cache { print "Found cached translation database\n" unless $QUIET_ARG; my $contents; open CACHE, "<$cache_file" || die; { local $/; $contents = ; } close CACHE; %translations = split "\x01", $contents; } sub get_cached_translation_database { my $cache_file_age = -M $cache_file; if (defined $cache_file_age) { if ($cache_file_age <= &get_newest_po_age) { &load_cache; return; } print "Found too-old cached translation database\n" unless $QUIET_ARG; } &create_cache; } sub create_translation_database { for my $lang (keys %po_files_by_lang) { my $po_file = $po_files_by_lang{$lang}; if ($UTF8_ARG) { my $encoding = get_po_encoding ($po_file); if (lc $encoding eq "utf-8") { open PO_FILE, "<$po_file"; } else { print "NOTICE: $po_file is not in UTF-8 but $encoding, converting...\n" unless $QUIET_ARG;; open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|"; } } else { open PO_FILE, "<$po_file"; } my $nextfuzzy = 0; my $inmsgid = 0; my $inmsgstr = 0; my $msgid = ""; my $msgstr = ""; while () { $nextfuzzy = 1 if /^#, fuzzy/; if (/^msgid "((\\.|[^\\]+)*)"/ ) { $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; $msgid = ""; $msgstr = ""; if ($nextfuzzy) { $inmsgid = 0; } else { $msgid = unescape_po_string($1); $inmsgid = 1; } $inmsgstr = 0; $nextfuzzy = 0; } if (/^msgstr "((\\.|[^\\]+)*)"/) { $msgstr = unescape_po_string($1); $inmsgstr = 1; $inmsgid = 0; } if (/^"((\\.|[^\\]+)*)"/) { $msgid .= unescape_po_string($1) if $inmsgid; $msgstr .= unescape_po_string($1) if $inmsgstr; } } $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; } } sub finalize { } sub unescape_one_sequence { my ($sequence) = @_; return "\\" if $sequence eq "\\\\"; return "\"" if $sequence eq "\\\""; return "\n" if $sequence eq "\\n"; return "\r" if $sequence eq "\\r"; return "\t" if $sequence eq "\\t"; return "\b" if $sequence eq "\\b"; return "\f" if $sequence eq "\\f"; return "\a" if $sequence eq "\\a"; return chr(11) if $sequence eq "\\v"; # vertical tab, see ascii(7) return chr(hex($1)) if ($sequence =~ /\\x([0-9a-fA-F]{2})/); return chr(oct($1)) if ($sequence =~ /\\([0-7]{3})/); # FIXME: Is \0 supported as well? Kenneth and Rodney don't want it, see bug #48489 return $sequence; } sub unescape_po_string { my ($string) = @_; $string =~ s/(\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\.)/unescape_one_sequence($1)/eg; return $string; } ## NOTE: deal with < - < but not > - > because it seems its ok to have ## > in the entity. For further info please look at #84738. sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; s/</; close INPUT; } open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!"; # Binmode so that selftest works ok if using a native Win32 Perl... binmode (OUTPUT) if $^O eq 'MSWin32'; while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) { print OUTPUT $1; my $node = $2 . "\n"; my @strings = (); $_ = $node; while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) { push @strings, entity_decode($3); } print OUTPUT; my %langs; for my $string (@strings) { for my $lang (keys %po_files_by_lang) { $langs{$lang} = 1 if $translations{$lang, $string}; } } for my $lang (sort keys %langs) { $_ = $node; s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s; s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg; print OUTPUT; } } print OUTPUT $source; close OUTPUT; } ## XML (non-bonobo-activation) merge code # Process tag attributes # Only parameter is a HASH containing attributes -> values mapping sub getAttributeString { my $sub = shift; my $do_translate = shift || 0; my $language = shift || ""; my $result = ""; my $translate = shift; foreach my $e (reverse(sort(keys %{ $sub }))) { my $key = $e; my $string = $sub->{$e}; my $quote = '"'; $string =~ s/^[\s]+//; $string =~ s/[\s]+$//; if ($string =~ /^'.*'$/) { $quote = "'"; } $string =~ s/^['"]//g; $string =~ s/['"]$//g; if ($do_translate && $key =~ /^_/) { $key =~ s|^_||g; if ($language) { # Handle translation my $decode_string = entity_decode($string); my $translation = $translations{$language, $decode_string}; if ($translation) { $translation = entity_encode($translation); $string = $translation; } $$translate = 2; } else { $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" $translate } } $result .= " $key=$quote$string$quote"; } return $result; } # Returns a translatable string from XML node, it works on contents of every node in XML::Parser tree sub getXMLstring { my $ref = shift; my $spacepreserve = shift || 0; my @list = @{ $ref }; my $result = ""; my $count = scalar(@list); my $attrs = $list[0]; my $index = 1; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); while ($index < $count) { my $type = $list[$index]; my $content = $list[$index+1]; if (! $type ) { # We've got CDATA if ($content) { # lets strip the whitespace here, and *ONLY* here $content =~ s/\s+/ /gs if (!$spacepreserve); $result .= $content; } } elsif ( "$type" ne "1" ) { # We've got another element $result .= "<$type"; $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements if ($content) { my $subresult = getXMLstring($content, $spacepreserve); if ($subresult) { $result .= ">".$subresult . ""; } else { $result .= "/>"; } } else { $result .= "/>"; } } $index += 2; } return $result; } # Translate list of nodes if necessary sub translate_subnodes { my $fh = shift; my $content = shift; my $language = shift || ""; my $singlelang = shift || 0; my $spacepreserve = shift || 0; my @nodes = @{ $content }; my $count = scalar(@nodes); my $index = 0; while ($index < $count) { my $type = $nodes[$index]; my $rest = $nodes[$index+1]; if ($singlelang) { my $oldMO = $MULTIPLE_OUTPUT; $MULTIPLE_OUTPUT = 1; traverse($fh, $type, $rest, $language, $spacepreserve); $MULTIPLE_OUTPUT = $oldMO; } else { traverse($fh, $type, $rest, $language, $spacepreserve); } $index += 2; } } sub isWellFormedXmlFragment { my $ret = eval 'require XML::Parser'; if(!$ret) { die "You must have XML::Parser installed to run $0\n\n"; } my $fragment = shift; return 0 if (!$fragment); $fragment = "$fragment"; my $xp = new XML::Parser(Style => 'Tree'); my $tree = 0; eval { $tree = $xp->parse($fragment); }; return $tree; } sub traverse { my $fh = shift; my $nodename = shift; my $content = shift; my $language = shift || ""; my $spacepreserve = shift || 0; if (!$nodename) { if ($content =~ /^[\s]*$/) { $leading_space .= $content; } print $fh $content; } else { # element my @all = @{ $content }; my $attrs = shift @all; my $translate = 0; my $outattr = getAttributeString($attrs, 1, $language, \$translate); if ($nodename =~ /^_/) { $translate = 1; $nodename =~ s/^_//; } my $lookup = ''; $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); print $fh "<$nodename", $outattr; if ($translate) { $lookup = getXMLstring($content, $spacepreserve); if (!$spacepreserve) { $lookup =~ s/^\s+//s; $lookup =~ s/\s+$//s; } if ($lookup || $translate == 2) { my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup}); if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) { $translation = $lookup if (!$translation); print $fh " xml:lang=\"", $language, "\"" if $language; print $fh ">"; if ($translate == 2) { translate_subnodes($fh, \@all, $language, 1, $spacepreserve); } else { print $fh $translation; } print $fh ""; return; # this means there will be no same translation with xml:lang="$language"... # if we want them both, just remove this "return" } else { print $fh ">"; if ($translate == 2) { translate_subnodes($fh, \@all, $language, 1, $spacepreserve); } else { print $fh $lookup; } print $fh ""; } } else { print $fh "/>"; } for my $lang (sort keys %po_files_by_lang) { if ($MULTIPLE_OUTPUT && $lang ne "$language") { next; } if ($lang) { # Handle translation # my $translate = 0; my $localattrs = getAttributeString($attrs, 1, $lang, \$translate); my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup}); if ($translate && !$translation) { $translation = $lookup; } if ($translation || $translate) { print $fh "\n"; $leading_space =~ s/.*\n//g; print $fh $leading_space; print $fh "<", $nodename, " xml:lang=\"", $lang, "\"", $localattrs, ">"; if ($translate == 2) { translate_subnodes($fh, \@all, $lang, 1, $spacepreserve); } else { print $fh $translation; } print $fh ""; } } } } else { my $count = scalar(@all); if ($count > 0) { print $fh ">"; my $index = 0; while ($index < $count) { my $type = $all[$index]; my $rest = $all[$index+1]; traverse($fh, $type, $rest, $language, $spacepreserve); $index += 2; } print $fh ""; } else { print $fh "/>"; } } } } sub intltool_tree_comment { my $expat = shift; my $data = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; push @$clist, 1 => $data; } sub intltool_tree_cdatastart { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; push @$clist, 0 => $expat->original_string(); } sub intltool_tree_cdataend { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; $clist->[$pos] .= $expat->original_string(); } sub intltool_tree_char { my $expat = shift; my $text = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; # Use original_string so that we retain escaped entities # in CDATA sections. # if ($pos > 0 and $clist->[$pos - 1] eq '0') { $clist->[$pos] .= $expat->original_string(); } else { push @$clist, 0 => $expat->original_string(); } } sub intltool_tree_start { my $expat = shift; my $tag = shift; my @origlist = (); # Use original_string so that we retain escaped entities # in attribute values. We must convert the string to an # @origlist array to conform to the structure of the Tree # Style. # my @original_array = split /\x/, $expat->original_string(); my $source = $expat->original_string(); # Remove leading tag. # $source =~ s|^\s*<\s*(\S+)||s; # Grab attribute key/value pairs and push onto @origlist array. # while ($source) { if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; push @origlist, $1; push @origlist, '"' . $2 . '"'; } elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; push @origlist, $1; push @origlist, "'" . $2 . "'"; } else { last; } } my $ol = [ { @origlist } ]; push @{ $expat->{Lists} }, $expat->{Curlist}; push @{ $expat->{Curlist} }, $tag => $ol; $expat->{Curlist} = $ol; } sub readXml { my $filename = shift || return; if(!-f $filename) { die "ERROR Cannot find filename: $filename\n"; } my $ret = eval 'require XML::Parser'; if(!$ret) { die "You must have XML::Parser installed to run $0\n\n"; } my $xp = new XML::Parser(Style => 'Tree'); $xp->setHandlers(Char => \&intltool_tree_char); $xp->setHandlers(Start => \&intltool_tree_start); $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); my $tree = $xp->parsefile($filename); # Hello thereHowdydo # would be: # [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, [{}, # 0, "Howdy", ref, [{}]], 0, "do" ] ] return $tree; } sub print_header { my $infile = shift; my $fh = shift; my $source; if(!-f $infile) { die "ERROR Cannot find filename: $infile\n"; } print $fh qq{\n}; { local $/; open DOCINPUT, "<${FILE}" or die; $source = ; close DOCINPUT; } if ($source =~ /()/s) { print $fh "$1\n"; } elsif ($source =~ /(]*>)/s) { print $fh "$1\n"; } } sub parseTree { my $fh = shift; my $ref = shift; my $language = shift || ""; my $name = shift @{ $ref }; my $cont = shift @{ $ref }; while (!$name || "$name" eq "1") { $name = shift @{ $ref }; $cont = shift @{ $ref }; } my $spacepreserve = 0; my $attrs = @{$cont}[0]; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); traverse($fh, $name, $cont, $language, $spacepreserve); } sub xml_merge_output { my $source; if ($MULTIPLE_OUTPUT) { for my $lang (sort keys %po_files_by_lang) { if ( ! -d $lang ) { mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n"; } open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; my $tree = readXml($FILE); print_header($FILE, \*OUTPUT); parseTree(\*OUTPUT, $tree, $lang); close OUTPUT; print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG; } } open OUTPUT, ">$OUTFILE" or die "Cannot open $OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; my $tree = readXml($FILE); print_header($FILE, \*OUTPUT); parseTree(\*OUTPUT, $tree); close OUTPUT; print "CREATED $OUTFILE\n" unless $QUIET_ARG; } sub keys_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/[$lang]$1=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } sub desktop_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/${1}[$lang]=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } sub schemas_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; # FIXME: support attribute translations # Empty nodes never need translation, so unmark all of them. # For example, <_foo/> is just replaced by . $source =~ s|<\s*_($w+)\s*/>|<$1/>|g; while ($source =~ s/ (.*?) (\s+)((\s*) (\s*(?:\s*)?(.*?)\s*<\/default>)?(\s*) (\s*(?:\s*)?(.*?)\s*<\/short>)?(\s*) (\s*(?:\s*)?(.*?)\s*<\/long>)?(\s*) <\/locale>) //sx) { print OUTPUT $1; my $locale_start_spaces = $2 ? $2 : ''; my $default_spaces = $4 ? $4 : ''; my $short_spaces = $7 ? $7 : ''; my $long_spaces = $10 ? $10 : ''; my $locale_end_spaces = $13 ? $13 : ''; my $c_default_block = $3 ? $3 : ''; my $default_string = $6 ? $6 : ''; my $short_string = $9 ? $9 : ''; my $long_string = $12 ? $12 : ''; print OUTPUT "$locale_start_spaces$c_default_block"; $default_string =~ s/\s+/ /g; $default_string = entity_decode($default_string); $short_string =~ s/\s+/ /g; $short_string = entity_decode($short_string); $long_string =~ s/\s+/ /g; $long_string = entity_decode($long_string); for my $lang (sort keys %po_files_by_lang) { my $default_translation = $translations{$lang, $default_string}; my $short_translation = $translations{$lang, $short_string}; my $long_translation = $translations{$lang, $long_string}; next if (!$default_translation && !$short_translation && !$long_translation); print OUTPUT "\n$locale_start_spaces"; print OUTPUT "$default_spaces"; if ($default_translation) { $default_translation = entity_encode($default_translation); print OUTPUT "$default_translation"; } print OUTPUT "$short_spaces"; if ($short_translation) { $short_translation = entity_encode($short_translation); print OUTPUT "$short_translation"; } print OUTPUT "$long_spaces"; if ($long_translation) { $long_translation = entity_encode($long_translation); print OUTPUT "$long_translation"; } print OUTPUT "$locale_end_spaces"; } } print OUTPUT $source; close OUTPUT; } sub rfc822deb_merge_translations { my %encodings = (); for my $lang (keys %po_files_by_lang) { $encodings{$lang} = ($UTF8_ARG ? 'UTF-8' : get_po_encoding($po_files_by_lang{$lang})); } my $source; $Text::Wrap::huge = 'overflow'; $Text::Wrap::break = qr/\n|\s(?=\S)/; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">${OUTFILE}" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; while ($source =~ /(^|\n+)(_*)([^:\s]+)(:[ \t]*)(.*?)(?=\n[\S\n]|$)/sg) { my $sep = $1; my $non_translated_line = $3.$4; my $string = $5; my $underscore = length($2); next if $underscore eq 0 && $non_translated_line =~ /^#/; # Remove [] dummy strings my $stripped = $string; $stripped =~ s/\[\s[^\[\]]*\],/,/g if $underscore eq 2; $stripped =~ s/\[\s[^\[\]]*\]$//; $non_translated_line .= $stripped; print OUTPUT $sep.$non_translated_line; if ($underscore) { my @str_list = rfc822deb_split($underscore, $string); for my $lang (sort keys %po_files_by_lang) { my $is_translated = 1; my $str_translated = ''; my $first = 1; for my $str (@str_list) { my $translation = $translations{$lang, $str}; if (!$translation) { $is_translated = 0; last; } # $translation may also contain [] dummy # strings, mostly to indicate an empty string $translation =~ s/\[\s[^\[\]]*\]$//; if ($first) { if ($underscore eq 2) { $str_translated .= $translation; } else { $str_translated .= Text::Tabs::expand($translation) . "\n"; } } else { if ($underscore eq 2) { $str_translated .= ', ' . $translation; } else { $str_translated .= Text::Tabs::expand( Text::Wrap::wrap(' ', ' ', $translation)) . "\n .\n"; } } $first = 0; # To fix some problems with Text::Wrap::wrap $str_translated =~ s/(\n )+\n/\n .\n/g; } next unless $is_translated; $str_translated =~ s/\n \.\n$//; $str_translated =~ s/\s+$//; $_ = $non_translated_line; s/^(\w+):\s*.*/$sep${1}-$lang.$encodings{$lang}: $str_translated/s; print OUTPUT; } } } print OUTPUT "\n"; close OUTPUT; close INPUT; } sub rfc822deb_split { # Debian defines a special way to deal with rfc822-style files: # when a value contain newlines, it consists of # 1. a short form (first line) # 2. a long description, all lines begin with a space, # and paragraphs are separated by a single dot on a line # This routine returns an array of all paragraphs, and reformat # them. # When first argument is 2, the string is a comma separated list of # values. my $type = shift; my $text = shift; $text =~ s/^[ \t]//mg; return (split(/, */, $text, 0)) if $type ne 1; return ($text) if $text !~ /\n/; $text =~ s/([^\n]*)\n//; my @list = ($1); my $str = ''; for my $line (split (/\n/, $text)) { chomp $line; if ($line =~ /^\.\s*$/) { # New paragraph $str =~ s/\s*$//; push(@list, $str); $str = ''; } elsif ($line =~ /^\s/) { # Line which must not be reformatted $str .= "\n" if length ($str) && $str !~ /\n$/; $line =~ s/\s+$//; $str .= $line."\n"; } else { # Continuation line, remove newline $str .= " " if length ($str) && $str !~ /\n$/; $str .= $line; } } $str =~ s/\s*$//; push(@list, $str) if length ($str); return @list; } sub quoted_translation { my ($lang, $string) = @_; $string =~ s/\\\"/\"/g; my $translation = $translations{$lang, $string}; $translation = $string if !$translation; $translation =~ s/\"/\\\"/g; return $translation } sub quoted_merge_translations { if (!$MULTIPLE_OUTPUT) { print "Quoted only supports Multiple Output.\n"; exit(1); } for my $lang (sort keys %po_files_by_lang) { if ( ! -d $lang ) { mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n"; } open INPUT, "<${FILE}" or die; open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; while () { s/\"(([^\"]|\\\")*[^\\\"])\"/"\"" . "ed_translation($lang, $1) . "\""/ge; print OUTPUT; } close OUTPUT; close INPUT; } } pureadmin-0.4/configure0000755000175000017500000107502110670523037012202 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="configure.in" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INTLTOOL_DESKTOP_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_KEYS_RULE INTLTOOL_PROP_RULE INTLTOOL_OAF_RULE INTLTOOL_PONG_RULE INTLTOOL_SERVER_RULE INTLTOOL_SHEET_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_UI_RULE INTLTOOL_XAM_RULE INTLTOOL_KBD_RULE INTLTOOL_XML_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_CAVES_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_THEME_RULE INTLTOOL_SERVICE_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE INTLTOOL_PERL INTLTOOL_ICONV INTLTOOL_MSGFMT INTLTOOL_MSGMERGE INTLTOOL_XGETTEXT ALL_LINGUAS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE DATADIRNAME CPP GREP EGREP BINRELOC_CFLAGS BINRELOC_LIBS PKG_CONFIG GTK_CFLAGS GTK_LIBS GETTEXT_PACKAGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os USE_NLS MSGFMT MSGFMT_OPTS GMSGFMT XGETTEXT CATALOGS CATOBJEXT GMOFILES INSTOBJEXT INTLLIBS PO_IN_DATADIR_TRUE PO_IN_DATADIR_FALSE POFILES POSUB MKINSTALLDIRS ENABLE_DEBUG LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG GTK_CFLAGS GTK_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-binreloc compile with binary relocation support (default=enable when available) --enable-developer Turn on developer warnings and debugging (default=no) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=pureadmin VERSION=0.4 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' { echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi case "$am__api_version" in 1.01234) { { echo "$as_me:$LINENO: error: Automake 1.5 or newer is required to use intltool" >&5 echo "$as_me: error: Automake 1.5 or newer is required to use intltool" >&2;} { (exit 1); exit 1; }; } ;; *) ;; esac if test -n "0.31"; then { echo "$as_me:$LINENO: checking for intltool >= 0.31" >&5 echo $ECHO_N "checking for intltool >= 0.31... $ECHO_C" >&6; } INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.31 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { print $ 2; }' ${ac_aux_dir}/intltool-update.in` INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($ 2, VERSION, "."); print VERSION[1] * 1000 + VERSION[2] * 100 + VERSION[3];}' ${ac_aux_dir}/intltool-update.in` { echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found" >&5 echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || { { echo "$as_me:$LINENO: error: Your intltool is too old. You need intltool 0.31 or later." >&5 echo "$as_me: error: Your intltool is too old. You need intltool 0.31 or later." >&2;} { (exit 1); exit 1; }; } fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Use the tools built into the package, not the ones that are installed. INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract' INTLTOOL_MERGE='$(top_builddir)/intltool-merge' INTLTOOL_UPDATE='$(top_builddir)/intltool-update' # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { echo "$as_me:$LINENO: result: $INTLTOOL_PERL" >&5 echo "${ECHO_T}$INTLTOOL_PERL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test -z "$INTLTOOL_PERL"; then { { echo "$as_me:$LINENO: error: perl not found; required for intltool" >&5 echo "$as_me: error: perl not found; required for intltool" >&2;} { (exit 1); exit 1; }; } fi if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then { { echo "$as_me:$LINENO: error: perl 5.x required for intltool" >&5 echo "$as_me: error: perl 5.x required for intltool" >&2;} { (exit 1); exit 1; }; } fi if test "x" != "xno-xml"; then { echo "$as_me:$LINENO: checking for XML::Parser" >&5 echo $ECHO_N "checking for XML::Parser... $ECHO_C" >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6; } else { { echo "$as_me:$LINENO: error: XML::Parser perl module is required for intltool" >&5 echo "$as_me: error: XML::Parser perl module is required for intltool" >&2;} { (exit 1); exit 1; }; } fi fi # Extract the first word of "iconv", so it can be a program name with args. set dummy iconv; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_INTLTOOL_ICONV+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $INTLTOOL_ICONV in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_ICONV="$INTLTOOL_ICONV" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_ICONV="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_INTLTOOL_ICONV" && ac_cv_path_INTLTOOL_ICONV="iconv" ;; esac fi INTLTOOL_ICONV=$ac_cv_path_INTLTOOL_ICONV if test -n "$INTLTOOL_ICONV"; then { echo "$as_me:$LINENO: result: $INTLTOOL_ICONV" >&5 echo "${ECHO_T}$INTLTOOL_ICONV" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_INTLTOOL_MSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $INTLTOOL_MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MSGFMT="$INTLTOOL_MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_MSGFMT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_INTLTOOL_MSGFMT" && ac_cv_path_INTLTOOL_MSGFMT="msgfmt" ;; esac fi INTLTOOL_MSGFMT=$ac_cv_path_INTLTOOL_MSGFMT if test -n "$INTLTOOL_MSGFMT"; then { echo "$as_me:$LINENO: result: $INTLTOOL_MSGFMT" >&5 echo "${ECHO_T}$INTLTOOL_MSGFMT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_INTLTOOL_MSGMERGE+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $INTLTOOL_MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MSGMERGE="$INTLTOOL_MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_INTLTOOL_MSGMERGE" && ac_cv_path_INTLTOOL_MSGMERGE="msgmerge" ;; esac fi INTLTOOL_MSGMERGE=$ac_cv_path_INTLTOOL_MSGMERGE if test -n "$INTLTOOL_MSGMERGE"; then { echo "$as_me:$LINENO: result: $INTLTOOL_MSGMERGE" >&5 echo "${ECHO_T}$INTLTOOL_MSGMERGE" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_INTLTOOL_XGETTEXT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $INTLTOOL_XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_XGETTEXT="$INTLTOOL_XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_INTLTOOL_XGETTEXT" && ac_cv_path_INTLTOOL_XGETTEXT="xgettext" ;; esac fi INTLTOOL_XGETTEXT=$ac_cv_path_INTLTOOL_XGETTEXT if test -n "$INTLTOOL_XGETTEXT"; then { echo "$as_me:$LINENO: result: $INTLTOOL_XGETTEXT" >&5 echo "${ECHO_T}$INTLTOOL_XGETTEXT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then DATADIRNAME=share else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 case $host in *-*-solaris*) { echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5 echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6; } if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define bind_textdomain_codeset to an innocuous variant, in case declares bind_textdomain_codeset. For example, HP-UX 11i declares gettimeofday. */ #define bind_textdomain_codeset innocuous_bind_textdomain_codeset /* System header to define __stub macros and hopefully few prototypes, which can conflict with char bind_textdomain_codeset (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef bind_textdomain_codeset /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bind_textdomain_codeset (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_bind_textdomain_codeset || defined __stub___bind_textdomain_codeset choke me #endif int main () { return bind_textdomain_codeset (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_bind_textdomain_codeset=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_bind_textdomain_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5 echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6; } if test $ac_cv_func_bind_textdomain_codeset = yes; then DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_config_commands="$ac_config_commands intltool" { echo "$as_me:$LINENO: checking for library containing strerror" >&5 echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } if test "${ac_cv_search_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_strerror=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5 echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6; } if test "${ac_cv_lib_crypt_crypt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crypt (); int main () { return crypt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_crypt_crypt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_crypt_crypt=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5 echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6; } if test $ac_cv_lib_crypt_crypt = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBCRYPT 1 _ACEOF LIBS="-lcrypt $LIBS" fi { echo "$as_me:$LINENO: checking for FAMOpen2 in -lfam" >&5 echo $ECHO_N "checking for FAMOpen2 in -lfam... $ECHO_C" >&6; } if test "${ac_cv_lib_fam_FAMOpen2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfam $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char FAMOpen2 (); int main () { return FAMOpen2 (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_fam_FAMOpen2=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fam_FAMOpen2=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_fam_FAMOpen2" >&5 echo "${ECHO_T}$ac_cv_lib_fam_FAMOpen2" >&6; } if test $ac_cv_lib_fam_FAMOpen2 = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBFAM 1 _ACEOF LIBS="-lfam $LIBS" fi { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } if test $ac_cv_lib_dl_dlopen = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi # Check whether --enable-binreloc was given. if test "${enable_binreloc+set}" = set; then enableval=$enable_binreloc; enable_binreloc=$enableval else enable_binreloc=auto fi BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then { echo "$as_me:$LINENO: checking for /proc/self/maps" >&5 echo $ECHO_N "checking for /proc/self/maps... $ECHO_C" >&6; } if test "${ac_cv_file__proc_self_maps+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "/proc/self/maps"; then ac_cv_file__proc_self_maps=yes else ac_cv_file__proc_self_maps=no fi fi { echo "$as_me:$LINENO: result: $ac_cv_file__proc_self_maps" >&5 echo "${ECHO_T}$ac_cv_file__proc_self_maps" >&6; } { echo "$as_me:$LINENO: checking whether everything is installed to the same prefix" >&5 echo $ECHO_N "checking whether everything is installed to the same prefix... $ECHO_C" >&6; } if test "${br_cv_valid_prefixes+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # datarootdir variables was introduced with autoconf-2.60 if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ \( "$datadir" = '${prefix}/share' -o \( "$datadir" = '${datarootdir}' -a "$datarootdir" = '${prefix}/share' \) \) -a \ "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi fi { echo "$as_me:$LINENO: result: $br_cv_valid_prefixes" >&5 echo "${ECHO_T}$br_cv_valid_prefixes" >&6; } fi { echo "$as_me:$LINENO: checking whether binary relocation support should be enabled" >&5 echo $ECHO_N "checking whether binary relocation support should be enabled... $ECHO_C" >&6; } if test "${br_cv_binreloc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi fi { echo "$as_me:$LINENO: result: $br_cv_binreloc" >&5 echo "${ECHO_T}$br_cv_binreloc" >&6; } if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" cat >>confdefs.h <<\_ACEOF #define ENABLE_BINRELOC _ACEOF fi pkg_modules="gtk+-2.0, gthread-2.0, libglade-2.0" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { echo "$as_me:$LINENO: checking for GTK" >&5 echo $ECHO_N "checking for GTK... $ECHO_C" >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\"") >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "$pkg_modules" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\"") >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "$pkg_modules" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$pkg_modules"` else GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$pkg_modules"` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 { { echo "$as_me:$LINENO: error: Package requirements ($pkg_modules) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " >&5 echo "$as_me: error: Package requirements ($pkg_modules) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " >&2;} { (exit 1); exit 1; }; } elif test $pkg_failed = untried; then { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details." >&5 echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } : fi GETTEXT_PACKAGE=pureadmin cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF ALL_LINGUAS="bg cs fr it ru sv tr" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac for ac_header in locale.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } if test "${am_cv_val_LC_MESSAGES+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then am_cv_val_LC_MESSAGES=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LC_MESSAGES 1 _ACEOF fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= if test "${ac_cv_header_libintl_h+set}" = set; then { echo "$as_me:$LINENO: checking for libintl.h" >&5 echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } if test "${ac_cv_header_libintl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking libintl.h usability" >&5 echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking libintl.h presence" >&5 echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for libintl.h" >&5 echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } if test "${ac_cv_header_libintl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_libintl_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } fi if test $ac_cv_header_libintl_h = yes; then gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { echo "$as_me:$LINENO: checking for ngettext in libc" >&5 echo $ECHO_N "checking for ngettext in libc... $ECHO_C" >&6; } if test "${gt_cv_func_ngettext_libc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then gt_cv_func_ngettext_libc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $gt_cv_func_ngettext_libc" >&5 echo "${ECHO_T}$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { echo "$as_me:$LINENO: checking for dgettext in libc" >&5 echo $ECHO_N "checking for dgettext in libc... $ECHO_C" >&6; } if test "${gt_cv_func_dgettext_libc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then gt_cv_func_dgettext_libc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $gt_cv_func_dgettext_libc" >&5 echo "${ECHO_T}$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_intl_bindtextdomain=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } if test $ac_cv_lib_intl_bindtextdomain = yes; then { echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5 echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_ngettext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_intl_ngettext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5 echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6; } if test $ac_cv_lib_intl_ngettext = yes; then { echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5 echo $ECHO_N "checking for dgettext in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_dgettext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_intl_dgettext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dgettext" >&5 echo "${ECHO_T}$ac_cv_lib_intl_dgettext" >&6; } if test $ac_cv_lib_intl_dgettext = yes; then gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { echo "$as_me:$LINENO: checking if -liconv is needed to use gettext" >&5 echo $ECHO_N "checking if -liconv is needed to use gettext... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: " >&5 echo "${ECHO_T}" >&6; } { echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5 echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_ngettext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_intl_ngettext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5 echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6; } if test $ac_cv_lib_intl_ngettext = yes; then { echo "$as_me:$LINENO: checking for dcgettext in -lintl" >&5 echo $ECHO_N "checking for dcgettext in -lintl... $ECHO_C" >&6; } if test "${ac_cv_lib_intl_dcgettext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_intl_dcgettext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dcgettext" >&5 echo "${ECHO_T}$ac_cv_lib_intl_dcgettext" >&6; } if test $ac_cv_lib_intl_dcgettext = yes; then gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then cat >>confdefs.h <<\_ACEOF #define HAVE_GETTEXT 1 _ACEOF # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { echo "$as_me:$LINENO: result: $MSGFMT" >&5 echo "${ECHO_T}$MSGFMT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done MSGFMT_OPTS= { echo "$as_me:$LINENO: checking if msgfmt accepts -c" >&5 echo $ECHO_N "checking if msgfmt accepts -c... $ECHO_C" >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { (echo "$as_me:$LINENO: msgfmt -c -o /dev/null conftest.foo") >&5 (msgfmt -c -o /dev/null conftest.foo) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then MSGFMT_OPTS=-c; { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 echo "${ECHO_T}$GMSGFMT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 echo "${ECHO_T}$XGETTEXT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then CATOBJEXT=.gmo DATADIRNAME=share else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 case $host in *-*-solaris*) { echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5 echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6; } if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define bind_textdomain_codeset to an innocuous variant, in case declares bind_textdomain_codeset. For example, HP-UX 11i declares gettimeofday. */ #define bind_textdomain_codeset innocuous_bind_textdomain_codeset /* System header to define __stub macros and hopefully few prototypes, which can conflict with char bind_textdomain_codeset (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef bind_textdomain_codeset /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bind_textdomain_codeset (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_bind_textdomain_codeset || defined __stub___bind_textdomain_codeset choke me #endif int main () { return bind_textdomain_codeset (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_bind_textdomain_codeset=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_bind_textdomain_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5 echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6; } if test $ac_cv_func_bind_textdomain_codeset = yes; then CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then cat >>confdefs.h <<\_ACEOF #define ENABLE_NLS 1 _ACEOF fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { echo "$as_me:$LINENO: result: $LINGUAS" >&5 echo "${ECHO_T}$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES developer=no # Check whether --enable-developer was given. if test "${enable_developer+set}" = set; then enableval=$enable_developer; if test "x$enable_developer" = xyes; then developer=yes; fi fi if test "x$developer" != xno; then { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -ggdb3" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -ggdb3... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__ggdb3+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -ggdb3" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__ggdb3=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__ggdb3=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__ggdb3" >&5 echo "${ECHO_T}$ac_cv_prog_cc__ggdb3" >&6; } if test x"$ac_cv_prog_cc__gstabs" = xyes; then CFLAGS="${CFLAGS} -gstabs" else if test x"$ac_cv_prog_cc_g" = xyes; then CFLAGS="${CFLAGS} -g" fi fi { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wshadow" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -Wshadow... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__wshadow+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -Wshadow" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__wshadow=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__wshadow=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__wshadow" >&5 echo "${ECHO_T}$ac_cv_prog_cc__wshadow" >&6; } if test x"$ac_cv_prog_cc__wshadow" = xyes; then CFLAGS="${CFLAGS} -Wshadow" fi { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wpointer-arith" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -Wpointer-arith... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__wpointer_arith+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -Wpointer-arith" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__wpointer_arith=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__wpointer_arith=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__wpointer_arith" >&5 echo "${ECHO_T}$ac_cv_prog_cc__wpointer_arith" >&6; } if test x"$ac_cv_prog_cc__wpointer_arith" = xyes; then CFLAGS="${CFLAGS} -Wpointer-arith" fi { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wfloat-equal" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -Wfloat-equal... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__wfloat_equal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -Wfloat-equal" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__wfloat_equal=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__wfloat_equal=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__wfloat_equal" >&5 echo "${ECHO_T}$ac_cv_prog_cc__wfloat_equal" >&6; } if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wfloat-equal" fi { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wsign-compare" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -Wsign-compare... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__wsign_compare+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -Wsign-compare" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__wsign_compare=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__wsign_compare=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__wsign_compare" >&5 echo "${ECHO_T}$ac_cv_prog_cc__wsign_compare" >&6; } if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wsign-compare" fi { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wmissing-noreturn" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -Wmissing-noreturn... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__wmissing_noreturn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -Wmissing-noreturn" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__wmissing_noreturn=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__wmissing_noreturn=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__wmissing_noreturn" >&5 echo "${ECHO_T}$ac_cv_prog_cc__wmissing_noreturn" >&6; } if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wmissing-noreturn" fi { echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wcast-align" >&5 echo $ECHO_N "checking whether ${CC-cc} accepts -Wcast-align... $ECHO_C" >&6; } if test "${ac_cv_prog_cc__wcast_align+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_CFLAGS="$CFLAGS" CFLAGS="${CFLAGS} -Wcast-align" if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc__wcast_align=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_prog_cc__wcast_align=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="${ac_save_CFLAGS}" fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc__wcast_align" >&5 echo "${ECHO_T}$ac_cv_prog_cc__wcast_align" >&6; } if test x"$ac_cv_prog_cc__wcast_align" = xyes; then CFLAGS="${CFLAGS} -Wcast-align" fi CFLAGS="${CFLAGS} -O0 -DDEVELOPER" fi ac_config_files="$ac_config_files Makefile autopackage/pureadmin.apspec src/Makefile po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir='${ac_aux_dir}' prefix="$prefix" exec_prefix="$exec_prefix" INTLTOOL_LIBDIR="$libdir" INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' INTLTOOL_ICONV='${INTLTOOL_ICONV}' INTLTOOL_MSGFMT='${INTLTOOL_MSGFMT}' INTLTOOL_MSGMERGE='${INTLTOOL_MSGMERGE}' INTLTOOL_XGETTEXT='${INTLTOOL_XGETTEXT}' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "intltool") CONFIG_COMMANDS="$CONFIG_COMMANDS intltool" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "autopackage/pureadmin.apspec") CONFIG_FILES="$CONFIG_FILES autopackage/pureadmin.apspec" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim MAINT!$MAINT$ac_delim INTLTOOL_DESKTOP_RULE!$INTLTOOL_DESKTOP_RULE$ac_delim INTLTOOL_DIRECTORY_RULE!$INTLTOOL_DIRECTORY_RULE$ac_delim INTLTOOL_KEYS_RULE!$INTLTOOL_KEYS_RULE$ac_delim INTLTOOL_PROP_RULE!$INTLTOOL_PROP_RULE$ac_delim INTLTOOL_OAF_RULE!$INTLTOOL_OAF_RULE$ac_delim INTLTOOL_PONG_RULE!$INTLTOOL_PONG_RULE$ac_delim INTLTOOL_SERVER_RULE!$INTLTOOL_SERVER_RULE$ac_delim INTLTOOL_SHEET_RULE!$INTLTOOL_SHEET_RULE$ac_delim INTLTOOL_SOUNDLIST_RULE!$INTLTOOL_SOUNDLIST_RULE$ac_delim INTLTOOL_UI_RULE!$INTLTOOL_UI_RULE$ac_delim INTLTOOL_XAM_RULE!$INTLTOOL_XAM_RULE$ac_delim INTLTOOL_KBD_RULE!$INTLTOOL_KBD_RULE$ac_delim INTLTOOL_XML_RULE!$INTLTOOL_XML_RULE$ac_delim INTLTOOL_XML_NOMERGE_RULE!$INTLTOOL_XML_NOMERGE_RULE$ac_delim INTLTOOL_CAVES_RULE!$INTLTOOL_CAVES_RULE$ac_delim INTLTOOL_SCHEMAS_RULE!$INTLTOOL_SCHEMAS_RULE$ac_delim INTLTOOL_THEME_RULE!$INTLTOOL_THEME_RULE$ac_delim INTLTOOL_SERVICE_RULE!$INTLTOOL_SERVICE_RULE$ac_delim INTLTOOL_EXTRACT!$INTLTOOL_EXTRACT$ac_delim INTLTOOL_MERGE!$INTLTOOL_MERGE$ac_delim INTLTOOL_UPDATE!$INTLTOOL_UPDATE$ac_delim INTLTOOL_PERL!$INTLTOOL_PERL$ac_delim INTLTOOL_ICONV!$INTLTOOL_ICONV$ac_delim INTLTOOL_MSGFMT!$INTLTOOL_MSGFMT$ac_delim INTLTOOL_MSGMERGE!$INTLTOOL_MSGMERGE$ac_delim INTLTOOL_XGETTEXT!$INTLTOOL_XGETTEXT$ac_delim ALL_LINGUAS!$ALL_LINGUAS$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF CEOF$ac_eof _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim DATADIRNAME!$DATADIRNAME$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim BINRELOC_CFLAGS!$BINRELOC_CFLAGS$ac_delim BINRELOC_LIBS!$BINRELOC_LIBS$ac_delim PKG_CONFIG!$PKG_CONFIG$ac_delim GTK_CFLAGS!$GTK_CFLAGS$ac_delim GTK_LIBS!$GTK_LIBS$ac_delim GETTEXT_PACKAGE!$GETTEXT_PACKAGE$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim USE_NLS!$USE_NLS$ac_delim MSGFMT!$MSGFMT$ac_delim MSGFMT_OPTS!$MSGFMT_OPTS$ac_delim GMSGFMT!$GMSGFMT$ac_delim XGETTEXT!$XGETTEXT$ac_delim CATALOGS!$CATALOGS$ac_delim CATOBJEXT!$CATOBJEXT$ac_delim GMOFILES!$GMOFILES$ac_delim INSTOBJEXT!$INSTOBJEXT$ac_delim INTLLIBS!$INTLLIBS$ac_delim PO_IN_DATADIR_TRUE!$PO_IN_DATADIR_TRUE$ac_delim PO_IN_DATADIR_FALSE!$PO_IN_DATADIR_FALSE$ac_delim POFILES!$POFILES$ac_delim POSUB!$POSUB$ac_delim MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim ENABLE_DEBUG!$ENABLE_DEBUG$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 43; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; "intltool":C) for file in intltool-extract intltool-merge intltool-update; do sed -e "s|@INTLTOOL_EXTRACT@|`pwd`/intltool-extract|g" \ -e "s|@INTLTOOL_LIBDIR@|${INTLTOOL_LIBDIR}|g" \ -e "s|@INTLTOOL_ICONV@|${INTLTOOL_ICONV}|g" \ -e "s|@INTLTOOL_MSGFMT@|${INTLTOOL_MSGFMT}|g" \ -e "s|@INTLTOOL_MSGMERGE@|${INTLTOOL_MSGMERGE}|g" \ -e "s|@INTLTOOL_XGETTEXT@|${INTLTOOL_XGETTEXT}|g" \ -e "s|@INTLTOOL_PERL@|${INTLTOOL_PERL}|g" \ < ${ac_aux_dir}/${file}.in > ${file}.out if cmp -s ${file} ${file}.out 2>/dev/null; then rm -f ${file}.out else mv -f ${file}.out ${file} fi chmod ugo+x ${file} chmod u+w ${file} done ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" if test ! -f "po/Makefile"; then { { echo "$as_me:$LINENO: error: po/Makefile is not ready." >&5 echo "$as_me: error: po/Makefile is not ready." >&2;} { (exit 1); exit 1; }; } fi mv "po/Makefile" "po/Makefile.tmp" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.tmp" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi echo echo "Configure results:" echo " FAM/Gamin support: $ac_cv_lib_fam_FAMOpen2" echo " Binreloc support: $br_cv_binreloc" echo " Developer build: $developer" echo pureadmin-0.4/config.sub0000755000175000017500000007746010524305372012264 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-09-20' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pureadmin-0.4/src/0000777000175000017500000000000010670523443011141 500000000000000pureadmin-0.4/src/eggtrayicon.c0000644000175000017500000003012110667602721013534 00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* eggtrayicon.c * Copyright (C) 2002 Anders Carlsson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "eggtrayicon.h" #include #include #ifndef EGG_COMPILATION #ifndef _ #define _(x) dgettext (GETTEXT_PACKAGE, x) #define N_(x) x #endif #else #define _(x) x #define N_(x) x #endif #define SYSTEM_TRAY_REQUEST_DOCK 0 #define SYSTEM_TRAY_BEGIN_MESSAGE 1 #define SYSTEM_TRAY_CANCEL_MESSAGE 2 #define SYSTEM_TRAY_ORIENTATION_HORZ 0 #define SYSTEM_TRAY_ORIENTATION_VERT 1 enum { PROP_0, PROP_ORIENTATION }; static GtkPlugClass *parent_class = NULL; static void egg_tray_icon_init (EggTrayIcon *icon); static void egg_tray_icon_class_init (EggTrayIconClass *klass); static void egg_tray_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void egg_tray_icon_realize (GtkWidget *widget); static void egg_tray_icon_unrealize (GtkWidget *widget); static void egg_tray_icon_update_manager_window (EggTrayIcon *icon); GType egg_tray_icon_get_type (void) { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (EggTrayIconClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) egg_tray_icon_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (EggTrayIcon), 0, /* n_preallocs */ (GInstanceInitFunc) egg_tray_icon_init }; our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0); } return our_type; } static void egg_tray_icon_init (EggTrayIcon *icon) { icon->stamp = 1; icon->orientation = GTK_ORIENTATION_HORIZONTAL; gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK); } static void egg_tray_icon_class_init (EggTrayIconClass *klass) { GObjectClass *gobject_class = (GObjectClass *)klass; GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; parent_class = g_type_class_peek_parent (klass); gobject_class->get_property = egg_tray_icon_get_property; widget_class->realize = egg_tray_icon_realize; widget_class->unrealize = egg_tray_icon_unrealize; g_object_class_install_property (gobject_class, PROP_ORIENTATION, g_param_spec_enum ("orientation", _("Orientation"), _("The orientation of the tray."), GTK_TYPE_ORIENTATION, GTK_ORIENTATION_HORIZONTAL, G_PARAM_READABLE)); } static void egg_tray_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { EggTrayIcon *icon = EGG_TRAY_ICON (object); switch (prop_id) { case PROP_ORIENTATION: g_value_set_enum (value, icon->orientation); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void egg_tray_icon_get_orientation_property (EggTrayIcon *icon) { Display *xdisplay; Atom type; int format; union { gulong *prop; guchar *prop_ch; } prop = { NULL }; gulong nitems; gulong bytes_after; int error, result; g_assert (icon->manager_window != None); xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); gdk_error_trap_push (); type = None; result = XGetWindowProperty (xdisplay, icon->manager_window, icon->orientation_atom, 0, G_MAXLONG, FALSE, XA_CARDINAL, &type, &format, &nitems, &bytes_after, &(prop.prop_ch)); error = gdk_error_trap_pop (); if (error || result != Success) return; if (type == XA_CARDINAL) { GtkOrientation orientation; orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; if (icon->orientation != orientation) { icon->orientation = orientation; g_object_notify (G_OBJECT (icon), "orientation"); } } if (prop.prop) XFree (prop.prop); } static GdkFilterReturn egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data) { EggTrayIcon *icon = user_data; XEvent *xev = (XEvent *)xevent; if (xev->xany.type == ClientMessage && xev->xclient.message_type == icon->manager_atom && (guint) xev->xclient.data.l[1] == icon->selection_atom) { egg_tray_icon_update_manager_window (icon); } else if (xev->xany.window == icon->manager_window) { if (xev->xany.type == PropertyNotify && xev->xproperty.atom == icon->orientation_atom) { egg_tray_icon_get_orientation_property (icon); } if (xev->xany.type == DestroyNotify) { egg_tray_icon_update_manager_window (icon); } } return GDK_FILTER_CONTINUE; } static void egg_tray_icon_unrealize (GtkWidget *widget) { EggTrayIcon *icon = EGG_TRAY_ICON (widget); GdkWindow *root_window; if (icon->manager_window != None) { GdkWindow *gdkwin; gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget), icon->manager_window); gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); } root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget)); gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon); if (GTK_WIDGET_CLASS (parent_class)->unrealize) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); } static void egg_tray_icon_send_manager_message (EggTrayIcon *icon, long message, Window window, long data1, long data2, long data3) { XClientMessageEvent ev; Display *display; ev.type = ClientMessage; ev.window = window; ev.message_type = icon->system_tray_opcode_atom; ev.format = 32; ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window); ev.data.l[1] = message; ev.data.l[2] = data1; ev.data.l[3] = data2; ev.data.l[4] = data3; display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); gdk_error_trap_push (); XSendEvent (display, icon->manager_window, False, NoEventMask, (XEvent *)&ev); XSync (display, False); gdk_error_trap_pop (); } static void egg_tray_icon_send_dock_request (EggTrayIcon *icon) { egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_REQUEST_DOCK, icon->manager_window, gtk_plug_get_id (GTK_PLUG (icon)), 0, 0); } static void egg_tray_icon_update_manager_window (EggTrayIcon *icon) { Display *xdisplay; xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); if (icon->manager_window != None) { GdkWindow *gdkwin; gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)), icon->manager_window); gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); } XGrabServer (xdisplay); icon->manager_window = XGetSelectionOwner (xdisplay, icon->selection_atom); if (icon->manager_window != None) XSelectInput (xdisplay, icon->manager_window, StructureNotifyMask|PropertyChangeMask); XUngrabServer (xdisplay); XFlush (xdisplay); if (icon->manager_window != None) { GdkWindow *gdkwin; gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)), icon->manager_window); gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon); /* Send a request that we'd like to dock */ egg_tray_icon_send_dock_request (icon); egg_tray_icon_get_orientation_property (icon); } } static void egg_tray_icon_realize (GtkWidget *widget) { EggTrayIcon *icon = EGG_TRAY_ICON (widget); GdkScreen *screen; GdkDisplay *display; Display *xdisplay; char buffer[256]; GdkWindow *root_window; if (GTK_WIDGET_CLASS (parent_class)->realize) GTK_WIDGET_CLASS (parent_class)->realize (widget); screen = gtk_widget_get_screen (widget); display = gdk_screen_get_display (screen); xdisplay = gdk_x11_display_get_xdisplay (display); /* Now see if there's a manager window around */ g_snprintf (buffer, sizeof (buffer), "_NET_SYSTEM_TRAY_S%d", gdk_screen_get_number (screen)); icon->selection_atom = XInternAtom (xdisplay, buffer, False); icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False); icon->system_tray_opcode_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_OPCODE", False); icon->orientation_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_ORIENTATION", False); egg_tray_icon_update_manager_window (icon); root_window = gdk_screen_get_root_window (screen); /* Add a root window filter so that we get changes on MANAGER */ gdk_window_add_filter (root_window, egg_tray_icon_manager_filter, icon); } EggTrayIcon * egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name) { GdkDisplay *display; GdkScreen *screen; display = gdk_x11_lookup_xdisplay (DisplayOfScreen (xscreen)); screen = gdk_display_get_screen (display, XScreenNumberOfScreen (xscreen)); return egg_tray_icon_new_for_screen (screen, name); } EggTrayIcon * egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name) { g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL); } EggTrayIcon* egg_tray_icon_new (const gchar *name) { return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL); } guint egg_tray_icon_send_message (EggTrayIcon *icon, gint timeout, const gchar *message, gint len) { guint stamp; g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0); g_return_val_if_fail (timeout >= 0, 0); g_return_val_if_fail (message != NULL, 0); if (icon->manager_window == None) return 0; if (len < 0) len = strlen (message); stamp = icon->stamp++; /* Get ready to send the message */ egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE, (Window)gtk_plug_get_id (GTK_PLUG (icon)), timeout, len, stamp); /* Now to send the actual message */ gdk_error_trap_push (); while (len > 0) { XClientMessageEvent ev; Display *xdisplay; xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); ev.type = ClientMessage; ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon)); ev.format = 8; ev.message_type = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_MESSAGE_DATA", False); if (len > 20) { memcpy (&ev.data, message, 20); len -= 20; message += 20; } else { memcpy (&ev.data, message, len); len = 0; } XSendEvent (xdisplay, icon->manager_window, False, StructureNotifyMask, (XEvent *)&ev); XSync (xdisplay, False); } gdk_error_trap_pop (); return stamp; } void egg_tray_icon_cancel_message (EggTrayIcon *icon, guint id) { g_return_if_fail (EGG_IS_TRAY_ICON (icon)); g_return_if_fail (id > 0); egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE, (Window)gtk_plug_get_id (GTK_PLUG (icon)), id, 0, 0); } GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon) { g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL); return icon->orientation; } pureadmin-0.4/src/mainwin.h0000644000175000017500000000051410667602721012673 00000000000000#ifndef __MAINWIN_H__ #define __MAINWIN_H__ void user_list_select_user (const gchar *user, const gchar *remote_addr); void init_gui_mainwindow (void); void init_gui_logwindow (void); void init_gui_activities (void); void init_gui_online_users (void); gboolean timeout_update_activity (gpointer data); #endif /* __MAINWIN_H__ */ pureadmin-0.4/src/usr_manager.h0000644000175000017500000000603610667602721013541 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Usermanager functions * * Copyright (C) 2003 Isak Savo */ #ifndef __USR_MANAGER_H__ #define __USR_MANAGER_H__ #include #include #include "globals.h" #define PW_LINE_SEP ":" #define PW_LINE_SEP_CH ':' #ifndef PW_LINE_COMMENT # define PW_LINE_COMMENT '#' #endif typedef struct PWInfo_ { gchar *login; gchar *pwd; uid_t uid; gid_t gid; gboolean chroot; gchar *home; gchar *gecos; gulong bw_dl; gulong bw_ul; guint quota_files; guint64 quota_size; guint ul_ratio; guint dl_ratio; gchar *allow_local_ip; gchar *deny_local_ip; gchar *allow_client_ip; gchar *deny_client_ip; guint time_begin; guint time_end; guint per_user_max; } PWInfo; typedef struct PAvailableUser_ { gchar *login; gchar *realname; } PAvailableUser; struct usrman_info_widgets { GtkWidget *login, *realname, *home, *root, *pwd; GtkWidget *chk_chroot, *e_uid, *e_gid; GtkWidget *bw_ul, *bw_dl, *quota_files, *quota_size; GtkWidget *ul_ratio, *dl_ratio, *timelimit; GtkWidget *simsess; GtkWidget *loc_allow, *loc_deny, *cli_allow, *cli_deny; GtkWidget *btn_pwchange, *btn_savechanges, *btn_cancelchanges; GtkWidget *lbl_invalid_gid, *lbl_invalid_uid; GtkWidget *btn_browse_homedir, *btn_browse_fakeroot; }; enum { COL_USRMAN_ICON, COL_USRMAN_LOGIN, COL_USRMAN_REALNAME, N_USRMAN_COLUMNS }; #define PUREADMIN_USERMANAGER_ERROR g_quark_from_static_string ("PUREADMIN_USR") typedef enum { PA_USR_ERROR_COMMAND_NOT_FOUND, PA_USR_ERROR_FILE_NOT_FOUND, PA_USR_ERROR_PERMISSION_DENIED, PA_USR_ERROR_USER_NOT_FOUND, PA_USR_ERROR_INVALID_FIELD, PA_USR_ERROR_FAILED } PureadminUsermanagerError; GtkWidget *usr_init_usermanager_window (GtkWidget *parent_window); gint usr_fill_users_list (void); void usr_widgets_set_active_state (gboolean active); gboolean usr_widgets_set_info (gchar *user); gboolean usr_user_exists (const gchar *user); void usr_select_user (const gchar *user); gboolean usr_select_first_user (void); gboolean usr_remove_user (const gchar *user, GError **err); gboolean usr_add_user (const gchar *user, const gchar *passwd, GError **err); gboolean usr_save_user_info (GError **err); GList *usr_get_available_users (GError **err); gchar *usr_data_serialize(const PWInfo *info); PWInfo *usr_data_deserialize (const gchar *line); #endif /* __USR_MANAGER_H__ */ pureadmin-0.4/src/debugging.c0000644000175000017500000001034610667602721013163 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Debugging functions * * Copyright (C) 2003-2004 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "globals.h" #include "gui_helper.h" #include "debugging.h" #include "helper.h" gint dbg_handler_id = 0; GtkWidget *dbg_window = NULL; GtkTextBuffer *dbg_buffer = NULL; GtkTextView *dbg_textview = NULL; GtkTextTag *dbg_tags[NUM_DBGTAGS]; /* Prints a message to the debugging console */ static void dbg_print_message (dbg_tags_t tag, const gchar *message) { GtkTextIter iter; static GtkTextMark *mark = NULL; gchar *utf8_buf; utf8_buf = string_to_utf8 (message); gtk_text_buffer_get_end_iter (dbg_buffer, &iter); gtk_text_buffer_insert_with_tags (dbg_buffer, &iter, utf8_buf, -1, dbg_tags[tag], NULL); if (!mark) mark = gtk_text_buffer_create_mark (dbg_buffer, "last_line", &iter, FALSE); else gtk_text_buffer_move_mark (dbg_buffer, mark, &iter); gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (dbg_textview), mark, 0, TRUE, 0, 1); g_free (utf8_buf); return; } /** GLOBAL FUNCTIONS **/ /* init_dbg_console: Initializes the debugging window * * Returns: TRUE if everything is setup correctly. * FALSE if something went wrong. */ gboolean init_dbg_console (void) { if (!dbg_window) { dbg_window = MW("dlg_debug"); if (!dbg_window) return FALSE; dbg_textview = (GtkTextView *) MW("dbg_text"); dbg_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dbg_textview)); dbg_tags[DBG_INFO] = gtk_text_buffer_create_tag (dbg_buffer, "info", "foreground", "#a427a9", NULL); dbg_tags[DBG_WARNING] = gtk_text_buffer_create_tag (dbg_buffer, "warning", "foreground", "#2e9344", NULL); dbg_tags[DBG_ERROR] = gtk_text_buffer_create_tag (dbg_buffer, "error", "foreground", "red", NULL); dbg_tags[DBG_DEBUG] = gtk_text_buffer_create_tag (dbg_buffer, "notice", "foreground", "#899f22", NULL); g_signal_connect (G_OBJECT (dbg_window), "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), dbg_window); g_signal_connect_swapped (G_OBJECT (MW("dbg_btn_close")), "clicked", G_CALLBACK (gtk_widget_hide), dbg_window); } return TRUE; } /* pur_debug_handler: This function shuold be set as a log-handler using * the g_log framework. * * Arguments: log_domain: The log domain for this program ("pureadmin") * log_level: The level of the current message (i.e. critical, warning etc.) * message: The message to log. Will be converted to UTF-8 if needed * user_data: Not used */ void pur_debug_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { gchar *dbg_message = NULL; dbg_tags_t text_tag = DBG_ERROR; if (log_level & G_LOG_LEVEL_CRITICAL) { dbg_message = g_strdup_printf ("[ERR] %s\n", message); text_tag = DBG_ERROR; } else if (log_level & G_LOG_LEVEL_WARNING) { dbg_message = g_strdup_printf ("[WRN] %s\n", message); text_tag = DBG_WARNING; } else if (log_level & G_LOG_LEVEL_INFO) { dbg_message = g_strdup_printf ("[NFO] %s\n", message); text_tag = DBG_INFO; } else if (log_level & G_LOG_LEVEL_DEBUG) { dbg_message = g_strdup_printf ("[DBG] %s\n", message); text_tag = DBG_DEBUG; } else dbg_message = g_strdup_printf ("[%3d] %s\n", log_level & G_LOG_LEVEL_MASK, message); if (!dbg_window) g_print (dbg_message); else dbg_print_message (text_tag, dbg_message); } pureadmin-0.4/src/cfg.c0000644000175000017500000003225410670514340011762 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Configuration backend. * * Copyright (C) 2003-2006 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "globals.h" #include "helper.h" #include "cfg.h" /* Global configuration structure */ cfg_t cfg; /* cfg_write_settings: Writes the configuration to disk (~/.pureadminrc). * * Returns: TRUE if everything was saved. * FALSE if something went wrong. (i.e. file couldn't be opened) */ gboolean cfg_write_settings (void) { FILE *f; gchar filename[FILEPATH_MAX]; g_snprintf (filename, FILEPATH_MAX, "%s/" RCFILE, g_get_home_dir ()); if (!(f = fopen (filename, "w"))) { perror ("Unable to open config-file for writing"); return FALSE; } fputs ("# -*- sh -*-\n" "# ~/.pureadminrc - Configuration file for pureadmin\n" "# All variables are in the form VARNAME=VALUE where VALUE should be an UN-quoted string\n" "# Comment lines BEGINS with a '#'. Otherwise the # is considered a part of the value/variablename\n\n", f); fputs ("# Default UID and GID to assign to new virtual users. These should point to an un-priveliged system account.\n", f); if (cfg.default_uid > 0) fprintf (f, "defaultuid=%d\n", cfg.default_uid); if (cfg.default_gid > 0) fprintf (f, "defaultgid=%d\n\n", cfg.default_gid); if (cfg.default_home) { fputs ("# Default home is the directory which will be assigned to new users by default.\n", f); fprintf (f, "defaulthome=%s\n\n", cfg.default_home); } if (cfg.cmd_purepw) { fputs ("# Name and optional full path to the pure-pw command. Path is only needed if it is not installed in a standard location (i.e. Not in $PATH)\n", f); fprintf (f, "cmd_purepw=%s\n\n", cfg.cmd_purepw); } fputs ("# Name and location of the password files where pureftpd reads user-information. The pdb-file is a binary database file,\n", f); if (cfg.pwfile) fprintf (f, "pwfile=%s\n", cfg.pwfile); if (cfg.pdbfile) fprintf (f, "pdbfile=%s\n\n", cfg.pdbfile); if (cfg.logfile) { fputs ("# Location of the logfile where pureftpd writes logging info\n", f); fprintf (f, "logfile=%s\n\n", cfg.logfile); } fputs ("# Logging method, 0 means syslog and 1 means custom logfile\n", f); fprintf (f, "logmethod=%d\n", cfg.logmethod); fputs ("# If this is enabled, then DNS name lookups will be performed resulting in IP-addresses being\n" "# converted to human readable names\n" "# Setting this to 0 will make PureAdmin seem faster and more responsive.\n", f); fprintf (f, "resolve_hostnames=%d\n\n", cfg.resolve_hostnames); fputs ("# Indicates wether the first-time user-dialog messagebox have been seen by the user\n", f); fprintf (f, "seen_usrdlg_welcome=%d\n\n", cfg.seen_usrdlg_welcome); fputs ("# Indicates wether the FAM Error dialog should be shown or not\n", f); fprintf (f, "show_fam_errmsg=%d\n\n", cfg.show_fam_errmsg); fputs ("# Should we display an icon in the system tray upon events?\n", f); fprintf (f, "use_tray_icon=%d\n\n", cfg.use_tray_icon); fputs ("# Character set to use for usernames\n", f); fprintf (f, "username_encoding=%s\n", cfg.uname_encoding); fprintf (f, "use_system_encoding=%d\n\n", cfg.use_system_encoding); fputs ("# True if window size and position should be restored\n", f); fprintf (f, "save_window_geometry=%d\n\n", cfg.save_window_geometry); fputs ("# The window size and position in x:y pairs\n", f); fprintf (f, "window_size=%d:%d\n", cfg.win_size[0], cfg.win_size[1]); fprintf (f, "window_pos=%d:%d\n", cfg.win_pos[0], cfg.win_pos[1]); fprintf (f, "divider_pos=%d\n", cfg.div_pos); fprintf (f, "show_advinfo=%d\n", cfg.show_advinfo); fclose (f); return TRUE; } /* cfg_read_settings: Reads the settings from user configuration file (~/.pureadminrc) * * Returns: TRUE if all went well * FALSE if something went wrong. (i.e. file couldn't be opened) */ gboolean cfg_read_settings (void) { FILE *f; gchar filename[FILEPATH_MAX]; gchar buf[LINE_MAX], **arr; g_snprintf (filename, FILEPATH_MAX, "%s/" RCFILE, g_get_home_dir ()); if (!(f = fopen (filename, "r"))) { pur_log_wrn ("Unable to open config-file for reading: %s", strerror (errno)); pur_log_nfo ("Using default configuration\n"); return FALSE; } while (fgets (buf, LINE_MAX, f)) { g_strstrip (buf); if (*buf == '#' || *buf == '\0') continue; arr = g_strsplit (buf, "=", 2); if (!arr || !arr[0] || !arr[1]) continue; g_strstrip (arr[0]); g_strstrip (arr[1]); gchar *key = arr[0]; gchar *val = arr[1]; if (*val == '\0') /* Ignore values that is empty (i.e. "") */ continue; if (strncmp (key, "defaultuid", 10) == 0) cfg.default_uid = atoi (val); else if (strncmp (key, "defaultgid", 10) == 0) cfg.default_gid = atoi (val); else if (strncmp (key, "defaulthome", 11) == 0) { if (g_path_is_absolute(val)) { g_free (cfg.default_home); cfg.default_home = g_strdup (val); } } else if (strncmp (key, "cmd_purepw", 10) == 0) { if ((g_path_is_absolute(val) && g_file_test(val, G_FILE_TEST_EXISTS)) || g_find_program_in_path(val)) { g_free (cfg.cmd_purepw); cfg.cmd_purepw = g_strdup (val); } } else if (strncmp (key, "pwfile", 6) == 0) { if (g_path_is_absolute(val)) { g_free (cfg.pwfile); cfg.pwfile = g_strdup (val); } } else if (strncmp (key, "pdbfile", 7) == 0) { if (g_path_is_absolute(val)) { g_free (cfg.pdbfile); cfg.pdbfile = g_strdup (val); } } else if (strncmp (key, "logfile", 7) == 0) { if (g_path_is_absolute(val)) { g_free (cfg.logfile); cfg.logfile = g_strdup (val); } } else if (strncmp (key, "logmethod", 9) == 0) { cfg.logmethod = atoi (val); if (cfg.logmethod < 0 || cfg.logmethod >= NUM_LOGMETHODS) cfg.logmethod = 0; } else if (strncmp (key, "window_size", 11) == 0) sscanf (val,"%d:%d",&(cfg.win_size[0]), &(cfg.win_size[1])); else if (strncmp (key, "window_pos", 10) == 0) sscanf (val,"%d:%d",&(cfg.win_pos[0]), &(cfg.win_pos[1])); else if (strncmp (key, "divider_pos", 11) == 0) cfg.div_pos = atoi (val); else if (strncmp (key, "save_window_geometry", 20) == 0) cfg.save_window_geometry = atoi (val); else if (strncmp (key, "show_advinfo", 12) == 0) cfg.show_advinfo = atoi (val); else if (strncmp (key, "resolve_hostnames", 17) == 0) cfg.resolve_hostnames = atoi (val); else if (strncmp (key, "seen_usrdlg_welcome", 19) == 0) cfg.seen_usrdlg_welcome = atoi (val); else if (strncmp (key, "show_fam_errmsg", 15) == 0) cfg.show_fam_errmsg = atoi (val); else if (strncmp (key, "use_tray_icon", 13) == 0) cfg.use_tray_icon = atoi (val); else if (strncmp (key, "username_encoding", 17) == 0) { g_free (cfg.uname_encoding); cfg.uname_encoding = g_strdup (val); } else if (strncmp (key, "use_system_encoding", 19) == 0) cfg.use_system_encoding = atoi (val); g_strfreev (arr); } fclose (f); return TRUE; } void cfg_terminate (void) { g_free (cfg.default_home); g_free (cfg.cmd_purepw); g_free (cfg.cmd_ftpwho); g_free (cfg.cmd_startstop); g_free (cfg.cmd_useradd); g_free (cfg.cmd_groupadd); g_free (cfg.pwfile); g_free (cfg.pdbfile); g_free (cfg.logfile); g_free (cfg.uname_encoding); } gchar *cfg_find_default_home (void) { if (g_file_test ("/home/ftpuser", G_FILE_TEST_IS_DIR)) return g_strdup ("/home/ftpuser"); else if (g_file_test ("/home/ftpusers", G_FILE_TEST_IS_DIR)) return g_strdup ("/home/ftpusers"); else if (g_file_test ("/home/ftp", G_FILE_TEST_IS_DIR)) return g_strdup ("/home/ftp"); return g_strdup ("/home/ftpusers"); } gchar *cfg_find_pwfile (void) { if (g_file_test (g_getenv ("PURE_PASSWDFILE"), G_FILE_TEST_IS_REGULAR)) return g_strdup (g_getenv ("PURE_PASSWDFILE")); else if (g_file_test ("/etc/pureftpd.passwd", G_FILE_TEST_IS_REGULAR)) return g_strdup ("/etc/pureftpd.passwd"); else if (g_file_test ("/etc/pure-ftpd/pureftpd.passwd", G_FILE_TEST_IS_REGULAR)) return g_strdup ("/etc/pure-ftpd/pureftpd.passwd"); return NULL; } gchar *cfg_find_pdbfile (void) { if (g_file_test (g_getenv ("PURE_DBFILE"), G_FILE_TEST_IS_REGULAR)) return g_strdup (g_getenv ("PURE_DBFILE")); else if (g_file_test ("/etc/pureftpd.pdb", G_FILE_TEST_IS_REGULAR)) return g_strdup ("/etc/pureftpd.pdb"); else if (g_file_test ("/etc/pure-ftpd/pureftpd.pdb", G_FILE_TEST_IS_REGULAR)) return g_strdup ("/etc/pure-ftpd/pureftpd.pdb"); /* No existing, default to the same as pwfile but with pdb-extension */ if (cfg.pwfile) { gchar *s, *tmp ; s = g_strdup (cfg.pwfile); tmp = strrchr(s, '.'); if (tmp) *tmp = '\0'; tmp = g_strconcat (s, ".pdb", NULL); g_free (s); return tmp; } /* We've done all we can, return NULL */ return NULL; } guint cfg_find_ftpuser_uid (void) { gchar *s, **arr; guint rv = 0; arr = NULL; s = misc_get_line_beginning_with ("/etc/passwd", "ftpuser"); if (!s) return 0; arr = g_strsplit (s, ":", 0); if (arr_count (arr) > 2) rv = atoi (arr[2]); g_strfreev (arr); g_free (s); return rv; } guint cfg_find_ftpgroup_gid (void) { gchar *s, **arr; guint rv = 0; arr = NULL; s = misc_get_line_beginning_with ("/etc/group", "ftpgroup"); if (!s) return 0; arr = g_strsplit (s, ":", 0); if (arr_count (arr) > 2) rv = atoi (arr[2]); g_strfreev (arr); g_free (s); return rv; } gchar *cfg_get_pftp_config_dir (void) { gchar *dir = NULL; if (cfg.pwfile) dir = g_path_get_dirname (cfg.pwfile); else if (cfg.pdbfile) dir = g_path_get_dirname (cfg.pdbfile); else if (g_file_test("/etc/pure-ftpd", G_FILE_TEST_IS_DIR)) dir = g_strdup ("/etc/pure-ftpd"); else dir = g_strdup ("/etc"); return dir; } /* Gets the default password file for pureftpd, regardless of whether it exists or not */ gchar *cfg_get_pftp_default_pwfile (void) { if (g_getenv ("PURE_PASSWDFILE") && g_path_is_absolute(g_getenv("PURE_PASSWDFILE"))) return g_strdup (g_getenv ("PURE_PASSWDFILE")); gchar *dir = cfg_get_pftp_config_dir(); gchar *f = g_build_filename(dir, "pureftpd.passwd", NULL); g_free(dir); return f; } /* Gets the default dbfile for pureftpd, regardless of whether it exists or not */ gchar *cfg_get_pftp_default_pdbfile (void) { if (g_getenv ("PURE_DBFILE") && g_path_is_absolute(g_getenv("PURE_DBFILE"))) return g_strdup (g_getenv ("PURE_DBFILE")); gchar *dir = cfg_get_pftp_config_dir(); gchar *f = g_build_filename(dir, "pureftpd.pdb", NULL); g_free(dir); return f; } /* cfg_fill_missing: Tries to find sane defaults for values that there are no * configured setting for. This is mostly done by probing the * file system for the relevant files. */ void cfg_fill_missing (void) { if (!cfg.cmd_purepw) cfg.cmd_purepw = g_find_program_in_path ("pure-pw"); if (!cfg.cmd_ftpwho) cfg.cmd_ftpwho = g_find_program_in_path ("pure-ftpwho"); if (!cfg.cmd_startstop) { gchar prg_arr[][20] = { "rc.pure-ftpd", "rc.pureftpd", "pure-ftpd", "pure-ftpd-mysql"}; for (gint i = 0; i < G_N_ELEMENTS(prg_arr); i++) { gchar *s = prg_arr[i]; cfg.cmd_startstop = misc_find_prog_in_dirs (s, "/etc/rc.d /etc/rc.d/init.d /etc/init.d /usr/local/etc/rc.d"); if (cfg.cmd_startstop) break; } } if (!cfg.pwfile) { gchar *base = cfg_get_pftp_config_dir(); cfg.pwfile = g_build_filename (base, "pureftpd.passwd", NULL); g_free (base); } if (!cfg.pdbfile) { gchar *base = cfg_get_pftp_config_dir(); cfg.pdbfile = g_build_filename (base, "pureftpd.pdb", NULL); g_free (base); } if (!cfg.default_home) cfg.default_home = cfg_find_default_home (); if (!cfg.pwfile) cfg.pwfile = cfg_find_pwfile (); if (!cfg.pdbfile) cfg.pdbfile = cfg_find_pdbfile (); /* Find User ID of ftpuser */ if (!cfg.default_uid) cfg.default_uid = cfg_find_ftpuser_uid (); /* Find Group ID of ftpgroup */ if (!cfg.default_gid) cfg.default_gid = cfg_find_ftpgroup_gid (); if (!cfg.cmd_useradd) cfg.cmd_useradd = g_find_program_in_path ("useradd"); if (!cfg.cmd_groupadd) cfg.cmd_groupadd = g_find_program_in_path ("groupadd"); } /* cfg_set_defaults: Sets default values to the configuration struct. * This should only be called ONCE and before any * attempt to access or modify the cfg struct! * * Note: this function has no logic to make wise * decisions. See the cfg_fill_missing for that! */ void cfg_set_defaults (void) { memset (&cfg, 0, sizeof (cfg_t)); cfg.logfile = g_strdup ("/var/log/messages"); cfg.use_system_encoding = TRUE; cfg.uname_encoding = g_strdup ("UTF-8"); cfg.logmethod = LOG_SYSLOG; cfg.show_fam_errmsg = TRUE; } pureadmin-0.4/src/suexec.c0000644000175000017500000001105210667602721012517 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Functions related to run a program as root * * Copyright (C) 2003-2004 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_LIBDL #include #endif #include #include #include "globals.h" #include "binreloc.h" //#ifndef SELFPATH //# define SELFPATH BINDIR G_DIR_SEPARATOR_S "pureadmin" //#endif static void startup_notify_complete (void) { #ifdef HAVE_LIBDL void *gdk; gdk = dlopen (NULL, RTLD_LAZY); if (gdk) { void (*gdk_notify_startup_complete)() = dlsym (gdk, "gdk_notify_startup_complete"); if (gdk_notify_startup_complete) gdk_notify_startup_complete (); dlclose (gdk); } else pur_log_wrn ("Couldn't dlopen() myself: %s", g_strerror (errno)); #endif } gpointer gnomesu_dl = NULL; gboolean alternative_run_as_root (gchar **argv) { gboolean rv = FALSE; GError *err = NULL; gchar *icon = g_build_filename (pixmapdir, "pureadmin-48x48.png", NULL); /* No gnomesu available, try gksu as last resort (available on sudo distros, such as ubuntu) */ if (g_find_program_in_path ("gksudo")) { GString *pa_cmdline; gchar *cmd; gint exitstatus; pa_cmdline = g_string_new (""); argv++; while (*argv){ gchar *tmp = g_shell_quote (*argv); g_string_append (pa_cmdline, tmp); g_string_append_c (pa_cmdline, ' '); argv++; } cmd = g_strdup_printf ("gksudo --icon \"%s\" \"%s %s\"", icon, selfname, pa_cmdline->str); startup_notify_complete (); g_spawn_command_line_sync (cmd, NULL, NULL, &exitstatus, &err); g_string_free (pa_cmdline, TRUE); g_free (cmd); /* We should actually check the return value, but gksudo seems * to return anything *BUT* the documented values. */ if (err) { pur_log_err ("Error running gksudo: %s", err->message); g_error_free (err); rv = FALSE; } else if (!WIFEXITED(exitstatus)) { /* Terminated abnormally */ rv = FALSE; } else /* Exited alright and returned 0 */ rv = TRUE; } g_free (icon); return rv; } #ifndef HAVE_LIBDL gboolean init_suexec (void){ return TRUE; } gboolean run_as_root (gchar **argv) { return alternative_run_as_root (argv); } void suexec_shutdown (void) { return; } #else /* init_suexec: Tries to dlopen() libgnomesu, enabling easy switch-user * functions. */ gboolean init_suexec (void) { if (gnomesu_dl == NULL) { gnomesu_dl = dlopen ("libgnomesu.so", RTLD_LAZY); if (!gnomesu_dl) gnomesu_dl = dlopen ("libgnomesu.so.0", RTLD_LAZY); /* One more try */ if (!gnomesu_dl) return FALSE; } return TRUE; } /* suexec_shutdown: Closes the handle to libgnomesu */ void suexec_shutdown (void) { if (!gnomesu_dl) return; if (dlclose(gnomesu_dl) != 0) pur_log_wrn ("Unable to close gnomesu dl-handle: %s", dlerror()); } /* run_as_root: Wrapper around gnomesu_spawn_async() that executes pureadmin * as root. It does some sanity checks first, and makes sure that * the program executed is an absolute path. * * Arguments: argv The argument vector from main() */ gboolean run_as_root (gchar **argv) { static gboolean (*spawn_command) (gchar *,gchar**, gint*) = NULL; gchar *prgm, *tmp; gint pid = 0; if (!init_suexec()) return alternative_run_as_root (argv); dlerror(); if (spawn_command == NULL) { spawn_command = dlsym (gnomesu_dl, "gnomesu_spawn_async"); if ((tmp = dlerror()) != NULL) { pur_log_wrn ("Unable to retreive gnomesu function: %s", tmp); return FALSE; } } /* Ensure we have full path to pureadmin! */ if (!g_path_is_absolute (selfname)) { pur_log_wrn ("Cannot run %s: not an absolute path", selfname); return FALSE; } prgm = g_strdup (selfname); tmp = argv[0]; argv[0] = prgm; if (!spawn_command ("root", argv ,&pid)) pur_log_wrn ("Unable to run pureadmin as root"); argv[0] = tmp; g_free(prgm); return TRUE; } #endif /* HAVE_LIBDL */ pureadmin-0.4/src/eggmarshalers.c0000644000175000017500000004344510667602721014062 00000000000000 #include #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_char (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_int #define g_marshal_value_peek_flags(v) (v)->data[0].v_uint #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* VOID:OBJECT,OBJECT (eggmarshalers.list:1) */ void _egg_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), data2); } /* VOID:OBJECT,STRING,LONG,LONG (eggmarshalers.list:2) */ void _egg_marshal_VOID__OBJECT_STRING_LONG_LONG (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_STRING_LONG_LONG) (gpointer data1, gpointer arg_1, gpointer arg_2, glong arg_3, glong arg_4, gpointer data2); register GMarshalFunc_VOID__OBJECT_STRING_LONG_LONG callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 5); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_STRING_LONG_LONG) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_string (param_values + 2), g_marshal_value_peek_long (param_values + 3), g_marshal_value_peek_long (param_values + 4), data2); } /* VOID:OBJECT,LONG (eggmarshalers.list:3) */ void _egg_marshal_VOID__OBJECT_LONG (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_LONG) (gpointer data1, gpointer arg_1, glong arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_LONG callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_LONG) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_long (param_values + 2), data2); } /* VOID:OBJECT,STRING,STRING (eggmarshalers.list:4) */ void _egg_marshal_VOID__OBJECT_STRING_STRING (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_STRING_STRING) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gpointer data2); register GMarshalFunc_VOID__OBJECT_STRING_STRING callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_STRING_STRING) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_string (param_values + 2), g_marshal_value_peek_string (param_values + 3), data2); } /* VOID:UINT,UINT (eggmarshalers.list:5) */ void _egg_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1, guint arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__UINT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* BOOLEAN:INT (eggmarshalers.list:6) */ void _egg_marshal_BOOLEAN__INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef gboolean (*GMarshalFunc_BOOLEAN__INT) (gpointer data1, gint arg_1, gpointer data2); register GMarshalFunc_BOOLEAN__INT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gboolean v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 2); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOOLEAN__INT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_int (param_values + 1), data2); g_value_set_boolean (return_value, v_return); } /* BOOLEAN:ENUM (eggmarshalers.list:7) */ void _egg_marshal_BOOLEAN__ENUM (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef gboolean (*GMarshalFunc_BOOLEAN__ENUM) (gpointer data1, gint arg_1, gpointer data2); register GMarshalFunc_BOOLEAN__ENUM callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gboolean v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 2); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOOLEAN__ENUM) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_enum (param_values + 1), data2); g_value_set_boolean (return_value, v_return); } /* BOOLEAN:VOID (eggmarshalers.list:8) */ void _egg_marshal_BOOLEAN__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef gboolean (*GMarshalFunc_BOOLEAN__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_BOOLEAN__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gboolean v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOOLEAN__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_set_boolean (return_value, v_return); } /* OBJECT:VOID (eggmarshalers.list:9) */ void _egg_marshal_OBJECT__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef GObject* (*GMarshalFunc_OBJECT__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_OBJECT__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; GObject* v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_OBJECT__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_set_object_take_ownership (return_value, v_return); } /* VOID:VOID (eggmarshalers.list:10) */ /* VOID:INT,INT (eggmarshalers.list:11) */ void _egg_marshal_VOID__INT_INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__INT_INT) (gpointer data1, gint arg_1, gint arg_2, gpointer data2); register GMarshalFunc_VOID__INT_INT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__INT_INT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_int (param_values + 1), g_marshal_value_peek_int (param_values + 2), data2); } /* VOID:UINT,UINT (eggmarshalers.list:12) */ /* VOID:BOOLEAN (eggmarshalers.list:13) */ /* VOID:OBJECT,ENUM,BOXED (eggmarshalers.list:14) */ void _egg_marshal_VOID__OBJECT_ENUM_BOXED (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_ENUM_BOXED) (gpointer data1, gpointer arg_1, gint arg_2, gpointer arg_3, gpointer data2); register GMarshalFunc_VOID__OBJECT_ENUM_BOXED callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_ENUM_BOXED) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_enum (param_values + 2), g_marshal_value_peek_boxed (param_values + 3), data2); } /* VOID:BOXED (eggmarshalers.list:15) */ pureadmin-0.4/src/srv_comm.c0000644000175000017500000003273610670522753013064 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Functions for communication with PureFTPd server * Some parts is taken from the pure-ftpwho utility distributed with PureFTPd, * copyright is in these cases held by their respective author(s) * * Copyright (C) 2003 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "srv_comm.h" #include "helper.h" #include "cfg.h" #include "globals.h" GStaticMutex alist_mutex = G_STATIC_MUTEX_INIT; GList *cur_activities = NULL; /* Generates a unique id from the provided hash string. In most cases, * this will be the same as returned from g_str_hash, but this function * also guarantees that the id is unique in the provided list of activities. * * Theoreticly this could lead to a eternal loop, but it shouldn't * in practice! (Unless there are a couple of billion entries in the list) */ static guint _list_generate_unique_id (const gchar *hashstr, GList *list) { GList *node; gboolean already_exists; guint current; /* This should in most case generate a number that is unique */ current = g_str_hash (hashstr); do { already_exists = FALSE; node = g_list_first (list); while (node && already_exists == FALSE) { guint id = ((PActivity *) node->data)->id; if (id > current) /* The list is sorted ascending by ID, so this shortcut is valid */ return current; if (id == current) already_exists = TRUE; node = g_list_next (node); } if (G_UNLIKELY (already_exists)) current += g_random_int(); } while (already_exists); return current; } /* Parses a line separated by pipes ('|'), and returns an array of strings containing all the fields */ static gchar **ftpwho_parse_line (gchar *line) { gchar **retval; gchar *field; gboolean done = FALSE; gint array_count, i, j, line_length; if (!line || !strstr (line, "|")) return g_strsplit ("", "|", -1); if (G_LIKELY (strstr (line, "\\|") == NULL)) return g_strsplit (line, "|", -1); /* We need to handle an escaped pipe symbol in the username */ retval = g_new0 (gchar *, 13); i = 0; line_length = strlen (line); field = g_new0 (gchar, line_length); for (array_count = 0; array_count < 12 && i < line_length; array_count++) { done = FALSE; j = 0; while (!done && i < line_length) { if (line[i] == '\\' && line[i + 1] == '|') { field[j++] = '|'; i++; } else if (line[i] == '|') done = TRUE; else field[j++] = line[i]; i++; } retval[array_count] = g_strdup (field); memset (field, '\0', j); } g_free (field); return retval; } /* This function is used to find out/set whether the srv_com function * has fetched *any* data from the ftp server. This is used to display an * initial "please wait, fetching info..." message to the user * * Arguments: * set - If TRUE, the init_status will be set to TRUE, otherwise it will be left untouched. * * Returns: * The init status (TRUE if activities has been fetched at least once, otherwise FALSE) */ gboolean has_initialized (gboolean set) { static GStaticMutex mutex = G_STATIC_MUTEX_INIT; static gboolean init_status = FALSE; gboolean rv = FALSE; g_static_mutex_lock (&mutex); if (set) init_status = TRUE; rv = init_status; g_static_mutex_unlock (&mutex); return rv; } static gint cmp_activities_by_id (const PActivity *a1, const PActivity *a2) { if (G_UNLIKELY (a1 == NULL || a2 == NULL)) return 0; if (a1->id < a2->id) return 1; if (a1->id == a2->id) return 0; return -1; } static gint lst_find_user (gconstpointer listdata, gconstpointer searchdata) { gchar *haystack = (listdata ? ((POnlineUser *) listdata)->username : NULL); gchar *needle = (searchdata ? ((PActivity *) searchdata)->username : NULL); gboolean namematch, hostmatch; namematch = hostmatch = FALSE; if (G_UNLIKELY (!haystack || !needle || *haystack == 0 || *needle == 0)) return 0; if (g_str_equal (haystack, needle)) namematch = TRUE; haystack = ((POnlineUser *) listdata)->remote_addr; needle = ((PActivity *) searchdata)->remote_addr; if (g_str_equal (needle, haystack)) hostmatch = TRUE; if (hostmatch && namematch) return 0; /* Absolute match */ else if (namematch) /* These are actually not relevant, but return <0 or > 0 anyway */ return -1; else return 1; } /* Main worker function of this file. This function is responsible for fetching data from pure-ftpwho, parse it * and then store it in a GList of activities. Note: This function is running in a separate thread than the main * program, and extra care must be taken when accessing shared data structures: * * GList *cur_activities: Protected by static mutex alist_mutex */ static void update_activities (void) { gchar *c_stdout, *c_stderr; gchar **lines, **entries; gchar *cmd; GList *tmp_alist = NULL; gint exit_status, lineno, count; gboolean ret; /* FIXME: (Maybe) make the log handler thread safe so that we can call pur_log_*() from this function */ c_stdout = c_stderr = NULL; cmd = g_strdup_printf ("%s -s %s", cfg.cmd_ftpwho, cfg.resolve_hostnames ? "" : "-H"); ret = g_spawn_command_line_sync (cmd, &c_stdout, NULL, &exit_status, NULL); if (!ret) { //pur_log_wrn ("Unable to execute child: [%s]", cmd); g_free (cmd); return; } g_free (cmd); /* Parse output */ c_stdout = g_strchomp (c_stdout); lines = g_strsplit (c_stdout, "\n", 0); g_free (c_stdout); lineno = 0; while (lines[lineno]) { PActivity *activity; entries = ftpwho_parse_line (lines[lineno]); count = arr_count (entries); //pur_log_dbg ("ftpwho_parse_line: %d entries returned", count); if (count < 11) { //pur_log_wrn ("Line [%s]: only %d entries found!", lines[lineno], count); lineno++; g_strfreev (entries); continue; } /* Add new found entries to global list */ activity = g_new0 (PActivity, 1); activity->pid = atoi (entries[0]); activity->username = g_strdup (entries[1]); activity->online_since = atoi (entries[2]); if (strncmp (entries[3], "IDLE", 4) == 0) activity->state = FTPWHO_STATE_IDLE; else if (strncmp (entries[3], " DL ", 4) == 0) activity->state = FTPWHO_STATE_DOWNLOAD; else if (strncmp (entries[3], " UL ", 4) == 0) activity->state = FTPWHO_STATE_UPLOAD; activity->filename = g_strdup (entries[4]); activity->remote_addr = g_strdup (entries[5]); activity->download_current_size = atoi (entries[8]); activity->download_total_size = atoi (entries[9]); activity->percentage = atoi (entries[10]); activity->speed = atoi (entries[11]); gchar *hash_string = g_strconcat (activity->username, activity->remote_addr, activity->filename, entries[3], NULL); activity->id = _list_generate_unique_id (hash_string, tmp_alist); tmp_alist = g_list_insert_sorted (tmp_alist, activity, (GCompareFunc) cmp_activities_by_id); //tmp_alist = g_list_append (tmp_alist, activity); g_strfreev (entries); lineno++; } g_strfreev (lines); /* Clear the real (old) list in replace it with the newly fetched list */ g_static_mutex_lock (&alist_mutex); g_list_foreach (cur_activities, (GFunc) pactivity_free, NULL); g_list_free (cur_activities); cur_activities = tmp_alist; g_static_mutex_unlock (&alist_mutex); has_initialized (TRUE); } /** GLOBAL FUNCTIONS **/ void srv_terminate (void) { GList *node = g_list_first (cur_activities); if (!node) return; do { g_free (node->data); } while ((node = node->next)); g_list_free (cur_activities); cur_activities = NULL; return; } PActivity *pactivity_dup (PActivity *a) { PActivity *rv; rv = (PActivity *) g_memdup (a, sizeof (PActivity)); rv->username = g_strdup (a->username); rv->remote_addr = g_strdup (a->remote_addr); rv->filename = g_strdup (a->filename); return rv; } void pactivity_free (PActivity *a) { if (!a) return; g_free (a->username); g_free (a->remote_addr); g_free (a->filename); g_free (a); } void free_activity_list (GList *l) { GList *node = g_list_first (l); while (node) { pactivity_free ((PActivity *) node->data); node = g_list_next(node); } g_list_free (l); } void pouser_free (POnlineUser *u) { if (!u) return; g_free (u->username); g_free (u->remote_addr); g_free (u); } void free_pouser_list (GList *l) { GList *node = g_list_first (l); while (node) { pouser_free ((POnlineUser *) node->data); node = g_list_next(node); } g_list_free (l); } /* Returns the current activities on the server. The returned value is a GList of PActivity and should * be free'd when no longer used. See also: free_activity_list */ GList *srv_get_activities (void) { GList *retval = NULL, *node; PActivity *n_data; g_static_mutex_lock (&alist_mutex); node = cur_activities; while (node) { n_data = pactivity_dup ((PActivity *) node->data); retval = g_list_append (retval, n_data); node = g_list_next (node); } g_static_mutex_unlock (&alist_mutex); return retval; } gboolean srv_has_activities (void) { gboolean rv = FALSE; g_static_mutex_lock (&alist_mutex); if (cur_activities) rv = TRUE; g_static_mutex_unlock (&alist_mutex); return rv; } gboolean srv_try_get_activities (GError **err) { gchar *output, *err_output, *cmd; gint ret; gint exit_status; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if (!cfg.cmd_ftpwho) { g_set_error (err, PUREADMIN_SRV_ERROR, PA_SRV_ERROR_COMMAND_NOT_FOUND, _("Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed")); return FALSE; } cmd = g_strdup_printf ("%s -s -H", cfg.cmd_ftpwho); ret = g_spawn_command_line_sync (cmd, &output, &err_output, &exit_status, NULL); pur_log_dbg ("Running command: [%s]", cmd); if (!ret) { g_set_error (err, PUREADMIN_SRV_ERROR, PA_SRV_ERROR_COMMAND_NOT_FOUND, _("Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed")); g_free (cmd); g_free (output); return FALSE; } g_free (cmd); exit_status = (signed char) WEXITSTATUS(exit_status); if (exit_status) { if (strstr (output, "root")) g_set_error (err, PUREADMIN_SRV_ERROR, PA_SRV_ERROR_PERMISSION_DENIED, _("Permission denied")); else { if (exit_status == -1) g_set_error (err, PUREADMIN_SRV_ERROR, PA_SRV_ERROR_FAILED, _("Resource temporarily unavailable.")); else g_set_error (err, PUREADMIN_SRV_ERROR, PA_SRV_ERROR_FAILED, _("Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' "), exit_status, output, err_output); } g_free (output); g_free (err_output); return FALSE; } g_free (output); return TRUE; } G_GNUC_NORETURN gpointer srv_activity_thread (gpointer data) { while (1) { update_activities (); g_usleep (3000000); } } /* Returns the PActivity that has the provided id number. * The returned value should be free'd using pactivity_free when no longer used */ PActivity *srv_get_activity_with_id (guint id) { GList *node = NULL; PActivity *act = NULL, *rv; gboolean found = FALSE; g_static_mutex_lock (&alist_mutex); node = g_list_first (cur_activities); while (node && !found) { act = (PActivity *) node->data; if (act->id == id) found = TRUE; node = g_list_next (node); } rv = pactivity_dup (act); g_static_mutex_unlock (&alist_mutex); if (found) return rv; else return NULL; } GList *srv_get_pids_for_user_host (const gchar *user, const gchar *host) { GList *node = NULL; GList *ret = NULL; PActivity *act; if (!user || !host || *user == '\0' || *host == '\0') return NULL; g_static_mutex_lock (&alist_mutex); node = g_list_first (cur_activities); while (node) { act = (PActivity *) node->data; if (g_str_equal (act->username, user) && g_str_equal (act->remote_addr, host)) { ret = g_list_append (ret, GINT_TO_POINTER (act->pid)); } node = g_list_next (node); } g_static_mutex_unlock (&alist_mutex); return ret; } GList *srv_get_connected_users (GList *activities) { GList *retval = NULL, *node; POnlineUser *user = NULL; g_static_mutex_lock (&alist_mutex); activities = g_list_first (activities); while (activities) { if ((node = g_list_find_custom (retval, activities->data, (GCompareFunc) lst_find_user))) ((POnlineUser *) node->data)->num_connections++; else { user = g_new0 (POnlineUser, 1); user->username = g_strdup (((PActivity *) activities->data)->username); user->remote_addr = g_strdup (((PActivity *) activities->data)->remote_addr); user->num_connections = 1; retval = g_list_append (retval, user); } activities = g_list_next (activities); } g_static_mutex_unlock (&alist_mutex); return g_list_first (retval); } pureadmin-0.4/src/srv_comm.h0000644000175000017500000000530510667602721013061 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Functions for communication with PureFTPd server * Some parts is taken from the pure-ftpwho utility distributed with PureFTPd, * copyright is in these cases held by their respective author(s) * * Copyright (C) 2003 Isak Savo */ #ifndef __SRV_COMM_H__ #define __SRV_COMM_H__ #define MAX_USER_LENGTH 32U /* Taken from src/ftpwho-update.h in PureFTPd sourcetree */ typedef enum { FTPWHO_STATE_FREE = 0, /* must be first (0) */ FTPWHO_STATE_IDLE, FTPWHO_STATE_DOWNLOAD, FTPWHO_STATE_UPLOAD } FTPWhoEntryState; /* End stolen code */ /* This is the structs returned to the GUI */ typedef struct Activity_ { FTPWhoEntryState state; gchar *remote_addr; // gchar date; gint percentage; gint online_since; gint download_total_size; gint download_current_size; gchar *username; gchar *filename; guint pid; /* The process id of the server handling the specific activity. So that we can SIGTERM it!! */ gint speed; guint id; /* An Unique ID for the activity */ } PActivity; typedef struct OnlineUser_ { gchar *username; gchar *remote_addr; gint num_connections; } POnlineUser; #define PUREADMIN_SRV_ERROR g_quark_from_static_string ("PUREADMIN_SRV") typedef enum { PA_SRV_ERROR_COMMAND_NOT_FOUND, PA_SRV_ERROR_PERMISSION_DENIED, PA_SRV_ERROR_FAILED } PureadminServerError; /* srv_comm functions: */ gboolean has_initialized (gboolean set); PActivity *pactivity_dup (PActivity *a); void pactivity_free (PActivity *a); void free_activity_list (GList *l); void pouser_free (POnlineUser *u); void free_pouser_list (GList *l); gpointer srv_activity_thread (gpointer data); gboolean srv_has_activities (void); gboolean srv_try_get_activities (GError **err); GList *srv_get_activities (void); GList *srv_get_connected_users (GList *activities); GList *srv_get_pids_for_user_host (const gchar *user, const gchar *host); PActivity *srv_get_activity_with_id (guint id); void srv_terminate (void); #endif /* __SRV_COMM_H__ */ pureadmin-0.4/src/cfg.h0000644000175000017500000000565210667602721012000 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Configuration back-end. * * Copyright (C) 2003 Isak Savo */ #ifndef __CFG_H__ #define __CFG_H__ #define RCFILE ".pureadminrc" typedef enum { LOG_SYSLOG, LOG_CUSTOM, NUM_LOGMETHODS } logmethod_t; typedef struct conf_ { guint default_uid, default_gid; gchar *default_home; gchar *cmd_purepw, *cmd_ftpwho, *cmd_startstop; gchar *cmd_useradd, *cmd_groupadd; gchar *pwfile, *pdbfile; gchar *logfile; gchar *uname_encoding; gboolean seen_usrdlg_welcome; gboolean resolve_hostnames; gboolean show_fam_errmsg; gboolean save_window_geometry; gboolean use_system_encoding; gboolean use_tray_icon; gboolean always_notify_activities; gboolean show_advinfo; logmethod_t logmethod; gint win_pos[2]; gint win_size[2]; gint div_pos; } cfg_t; extern cfg_t cfg; /* cfg_set_defaults: Sets sane default values for the cfg variables. * In an OOP-language, this would be the constructor */ void cfg_set_defaults (void); /* cfg_fill_missing: Tries to fill cfg-variables with good values taken from the * users' system. See also cfg_find_* below. */ void cfg_fill_missing (void); /* cfg_read/write_settings: Reads or writes the settings from/to the users * configuration file (~/.pureadminrc). */ gboolean cfg_read_settings (void); gboolean cfg_write_settings (void); /* Free's all allocated memory */ void cfg_terminate (void); /* Gets the config directory for pureftpd. */ gchar *cfg_get_pftp_config_dir (void); /* cfg_pftb_get_default*: Thes functions returns the default location of * pure-ftpd related files. They do not check if the files * exist or not. */ gchar *cfg_get_pftp_default_pdbfile (void); gchar *cfg_get_pftp_default_pwfile (void); /* cfg_find_*: These functions will try to find valid values * for their respective configuration variable. * Values are found by probing the file system for * known location of files and looking in system * files for configuration. * * Note: You need to free all strings returned by these functions! */ gchar *cfg_find_default_home (void); gchar *cfg_find_pwfile (void); gchar *cfg_find_pdbfile (void); guint cfg_find_ftpuser_uid (void); guint cfg_find_ftpgroup_gid (void); #endif /* __CFG_H__ */ pureadmin-0.4/src/main.c0000644000175000017500000002342510667602721012156 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Main: Initiates the GUI and spawns timeout-functions. * * Copyright (C) 2003 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_LIBDL #include #endif #include #include #include #include #include #include #include "binreloc.h" #include "gui_helper.h" #include "globals.h" #include "cfg.h" #include "logfile.h" #include "helper.h" #include "famwrap.h" #include "debugging.h" #include "suexec.h" #include "mainwin.h" #include "helpview.h" #include "eggstatusicon.h" gboolean timeout_update_activity (gpointer data); gboolean timeout_check_for_availability (gpointer data); static ftp_runmode_t get_ftp_runmode (void); static void activity_show_error_message (const gchar *errmsg); static void activity_show_welcome_message (void); static gboolean create_remaining_xmls (gpointer data); gboolean debug = FALSE; gboolean prog_exiting = FALSE; GladeXML *mwin_xml = NULL; GladeXML *dlgs_xml = NULL; gchar *datadir = NULL; gchar *selfname = NULL; gchar *pixmapdir = NULL; gchar *docdir = NULL; /* Clean exit of the program. This should be called whenever we should terminate! */ void exit_program (void) { prog_exiting = TRUE; #ifdef HAVE_LIBFAM close_logfile (); fam_terminate (); #endif hlp_terminate (); gui_terminate (); srv_terminate (); /* Last of all, save settings */ cfg_write_settings (); cfg_terminate (); g_free (datadir); g_free (selfname); g_free (pixmapdir); g_free (docdir); } /* Will be called before main() */ static void locate_dirs () { gbr_init(NULL); datadir = gbr_find_data_dir(DATADIR); selfname = gbr_find_exe(BINDIR G_DIR_SEPARATOR_S "pureadmin"); pixmapdir = g_build_filename (datadir, PACKAGE, NULL); docdir = g_build_filename (datadir, PACKAGE, "docs", NULL); } int main (int argc, char *argv[]) { gchar *our_path = NULL; const gchar *startup_id; guint loghandler_id; gboolean srv_comm_have_access = FALSE; GError *err = NULL; if (g_getenv ("PUREADMIN_DEBUG") && *g_getenv ("PUREADMIN_DEBUG") != '0') debug = TRUE; locate_dirs(); pur_log_dbg ("Binary: %s", selfname); pur_log_dbg ("Datadir: %s", datadir); pur_log_dbg ("Pixmaps: %s", pixmapdir); pur_log_dbg ("Documents: %s", docdir); #ifdef ENABLE_NLS our_path = gbr_find_locale_dir(LOCALEDIR); bindtextdomain (GETTEXT_PACKAGE, our_path); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); g_free (our_path); #endif startup_id = g_getenv ("DESKTOP_STARTUP_ID"); gtk_init (&argc, &argv); /* Restore DESKTOP_STARTUP_ID since, appearently, gtk_init() sometimes clears it */ // FIXME: Do we need to check if setenv() is available? setenv ("DESKTOP_STARTUP_ID", startup_id, TRUE); if (getuid() != 0) { /* FIXME: Does it matter that gtk_init() changes argv? Or will values be inherited? */ if (run_as_root (argv)) { /* Fork/exec successful! Shut down and let the root process continue! */ suexec_shutdown(); return 0; } } #ifndef G_THREADS_ENABLED g_error ("Threading is not enabled, this will not work!"); #endif g_thread_init (NULL); our_path = g_build_filename (datadir, PACKAGE, "mainwindow.glade", NULL); mwin_xml = glade_xml_new (our_path, NULL, NULL); if (!mwin_xml) { g_warning ("Couldn't load glade file '%s', please make sure it is installed correctly.", our_path); g_print ("PureAdmin will now terminate since the graphical interface couldn't be created\n"); return -1; } g_free (our_path); our_path = g_build_filename (datadir, PACKAGE, NULL); set_pixmap_directory (our_path); g_free (our_path); init_dbg_console (); loghandler_id = g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, (GLogFunc) pur_debug_handler, NULL); /* This may happen if the user canceled the password dialog */ if (getuid () != 0) pur_log_wrn ("Warning, running without root access. This may not work!"); cfg_set_defaults (); cfg_read_settings (); cfg_fill_missing (); /* FIXME: Can perhaps be called automatically from cfg_read_settings()? */ init_gui_activities (); init_gui_online_users (); init_gui_logwindow (); init_gui_mainwindow (); ftp_runmode = get_ftp_runmode (); #ifdef HAVE_LIBFAM pur_log_dbg ("HAVE_LIBFAM is defined"); init_logfile (); #else pur_log_dbg ("HAVE_LIBFAM is *not* defined!"); #endif gtk_widget_show (MW("main_window")); /* Update statusbar with status of PureFTPd */ gui_update_server_status (); err = NULL; srv_comm_have_access = srv_try_get_activities (&err); if (srv_comm_have_access) { activity_show_welcome_message (); g_timeout_add (1000, (GSourceFunc) timeout_update_activity, NULL); pur_log_dbg ("Access to server activites granted!"); } else { activity_show_error_message (err->message); pur_log_wrn ("Don't have access to server activities: %s", err->message); pur_log_wrn ("Will re-check every 3 seconds if activities are available again"); g_timeout_add (3000, (GSourceFunc) timeout_check_for_availability, NULL); g_error_free (err); err = NULL; } pur_log_nfo ("PureAdmin started!"); g_thread_create ((GThreadFunc) srv_activity_thread, NULL, FALSE, &err); /* Add this anyway, since the functionality to get activities could recover */ if (err){ pur_log_err ("Couldn't create activity thread: %s", err->message); g_error_free (err); err = NULL; } else pur_log_dbg ("Activity thread created successfully"); glade_xml_signal_autoconnect (mwin_xml); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (MW("chk_show_hide_info")), cfg.show_advinfo); /* Need to call this manually, since the event handler will only be called if the button state changes */ gui_update_info_frame (NULL); g_idle_add ((GSourceFunc) create_remaining_xmls, NULL); //create_remaining_xmls(NULL); gtk_widget_show (MW("main_window")); gtk_main (); /* make the last messages go to stderr */ g_log_remove_handler (NULL, loghandler_id); suexec_shutdown(); return 0; } static ftp_runmode_t get_ftp_runmode (void) { gchar *s = misc_get_line_beginning_with ("/etc/inetd.conf", "ftp"); gchar *output = NULL; if (s && strstr (s, "pure-ftp")) { g_free (s); return RUNMODE_INETD; } g_free (s); if ((output = misc_spawn_command ("pgrep pure-ftpd")) != NULL) { gchar **pids = g_strsplit (output, "\n", -1); gint i = 0; while (pids && pids[i]) { gchar *pid_cmdline = misc_get_process_info (pids[i], "cmdline"); if (strncmp (pid_cmdline, "pure-ftpd (SERVER)", strlen("pure-ftpd (SERVER)")) == 0) { g_free (pid_cmdline); return RUNMODE_STANDALONE; } i++; } } return RUNMODE_STOPPED; } void activity_show_welcome_message (void) { GtkTreeIter iter; GtkWidget *tree_activities = NULL; GtkTreeModel *model = NULL; //GtkTreeSelection *sel; GdkPixbuf *icon; tree_activities = MW("tree_activity"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_activities)); //sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_activities)); //gtk_tree_selection_set_mode (sel, GTK_SELECTION_NONE); gui_clear_activity_list (); icon = gtk_widget_render_icon (tree_activities, "gtk-dialog-info", GTK_ICON_SIZE_MENU, ""); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ACT_ICON, icon, COL_ACT_TEXT, _("Fetching information about server activity, please wait..."), COL_ACT_ID, 666, -1); } static void activity_show_error_message (const gchar *errmsg) { GtkTreeIter iter; GtkWidget *tree_activities = NULL; GtkTreeModel *model = NULL; GtkTreeSelection *sel; GdkPixbuf *icon; gchar *msg; tree_activities = MW("tree_activity"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_activities)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_activities)); gtk_tree_selection_set_mode (sel, GTK_SELECTION_NONE); icon = gtk_widget_render_icon (tree_activities, "gtk-dialog-error",GTK_ICON_SIZE_MENU, ""); msg = g_strconcat (_("Unable to retreive information about server activities."), "\n", errmsg, NULL); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ACT_ICON, icon, COL_ACT_TEXT, msg, COL_ACT_ID, 666, -1); } /* This is run as an idle function, after the program has started. * It is used to parse all remaining glade XML-files (currently one) and * create the widgets */ static gboolean create_remaining_xmls (gpointer data) { gchar *our_path; our_path = g_build_filename (datadir, PACKAGE, "dialogs.glade", NULL); dlgs_xml = glade_xml_new (our_path, NULL, NULL); g_free (our_path); glade_xml_signal_autoconnect (dlgs_xml); /* We're done, don't call us again! */ return FALSE; } gboolean timeout_check_for_availability (gpointer data) { if (srv_try_get_activities (NULL)) { activity_show_welcome_message (); g_timeout_add (1000, (GSourceFunc) timeout_update_activity, NULL); pur_log_nfo ("Access to server activites finally granted!"); /* Our work is done, remove this function from the calling list */ return FALSE; } /* Re-try again in a couple of seconds */ return TRUE; } pureadmin-0.4/src/gui_helper.c0000644000175000017500000004445110667602721013357 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Misc helperfunctions related to the GUI * * Copyright (C) 2003 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "eggstatusicon.h" #include "helper.h" #include "gui_helper.h" #include "srv_comm.h" #include "usr_manager.h" #include "cfg.h" #include "binreloc.h" #include "system_accounts.h" EggStatusIcon *status_icon = NULL; static gchar *sec_to_time (gulong sec) { gchar *retval; gint hr, min; hr = sec / 3600; sec -= hr * 3600; min = sec / 60; sec -= min * 60; retval = g_strdup_printf ("%02d:%02d:%02d", hr, min, (gint) sec); return retval; } static gchar *get_size_string (guint kbytes) { if (kbytes > 1024 * 1024) return g_strdup_printf ("%.2lf %s", (gdouble) kbytes / (1024.0 * 1024.0), _("GiB")); if (kbytes > 1024) return g_strdup_printf ("%.2lf %s", (gdouble) kbytes / 1024.0, _("MiB")); return g_strdup_printf ("%d %s", kbytes, _("KiB")); } static gchar *gen_speed_string (gulong speed) { if (speed > 1024 * 1024) return g_strdup_printf ("%.1lf %s", (gdouble) speed / (1024.0 * 1024.0), _("GiB/s")); if (speed > 1024) return g_strdup_printf ("%.1lf %s", (gdouble) speed / 1024.0, _("MiB/s")); if (speed > 0) return g_strdup_printf ("%lu %s", speed, _("KiB/s")); /* Zero bytes per second in transfer speed */ return g_strdup (_("0 b/s (stalled)")); } void gui_terminate (void) { GtkWidget *pane, *main_window; /* Save window size and position */ pane = MW("hpaned1"); main_window = MW("main_window"); gtk_window_get_position (GTK_WINDOW (main_window), &(cfg.win_pos[0]), &(cfg.win_pos[1])); gtk_window_get_size (GTK_WINDOW (main_window), &(cfg.win_size[0]), &(cfg.win_size[1])); cfg.div_pos = gtk_paned_get_position (GTK_PANED (pane)); } extern gboolean trayicon_activate (EggStatusIcon *icon, gpointer user_data); void show_status_icon (const gchar *tooltip) { gboolean is_active; if (!cfg.use_tray_icon) return; g_object_get (MW("main_window"), "is-active", &is_active, NULL); if (is_active) { pur_log_dbg ("Won't show notification icon: main window already focused"); return; } if (!status_icon) { gchar *trayicon_fname = g_build_filename (pixmapdir, "pureadmin-16x16.png", NULL); if (!g_file_test (trayicon_fname, G_FILE_TEST_EXISTS)) { pur_log_err ("Couldn't find trayicon icon: %s", trayicon_fname); g_free (trayicon_fname); return; } status_icon = egg_status_icon_new_from_file (trayicon_fname); g_signal_connect (G_OBJECT (status_icon), "activate", G_CALLBACK (trayicon_activate), NULL); g_free (trayicon_fname); } egg_status_icon_set_tooltip (EGG_STATUS_ICON (status_icon), tooltip, NULL); } void hide_status_icon (void) { if (!cfg.use_tray_icon || !status_icon) return; g_object_unref (G_OBJECT(status_icon)); status_icon = NULL; } void send_notification (const gchar *summary, const gchar *body) { GError *err = NULL; gchar *icon = g_build_filename (pixmapdir, "pureadmin-32x32.png", NULL); gchar *cmd = g_strdup_printf ("notify-send \"--icon=%s\" --urgency=low \"%s\" \"%s\"", icon, summary, body); if (!g_spawn_command_line_async(cmd, &err)) { pur_log_wrn ("Couldn't send notification: %s", err->message); g_error_free (err); err = NULL; } g_free (icon); g_free (cmd); } /* Statusbar functions, FIXME? Should contex-id be taken into account?? */ void statusbar_push (const gchar *msg) { static GtkWidget *statusbar = NULL; gchar *utf8_msg; if (!statusbar) statusbar = MW("main_statusbar"); utf8_msg = string_to_utf8 (msg); gtk_statusbar_push (GTK_STATUSBAR (statusbar), 0, utf8_msg); g_free (utf8_msg); } void statusbar_pop (void) { static GtkWidget *statusbar = NULL; if (!statusbar) statusbar = MW("main_statusbar"); gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 0); } void gui_select_treeview_row (GtkTreeIter *iter, GtkTreeView *tree) { GtkTreePath *path; GtkTreeModel *model; GtkTreeSelection *sel; if (!iter || !tree) return; model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)); path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), iter); gtk_tree_selection_select_iter (GTK_TREE_SELECTION (sel), iter); gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (tree), path, NULL, TRUE, 0.4, 0); gtk_tree_path_free (path); return; } void gui_update_server_status (void) { GtkWidget *mnu_label, *mnu_item; gchar *msg = NULL, *lbl = NULL; switch (ftp_runmode) { case RUNMODE_STANDALONE: msg = g_strdup (_("PureFTPd running (standalone)")); lbl = g_strdup (_("_Stop Server")); break; case RUNMODE_INETD: msg = g_strdup (_("PureFTPd running (inetd)")); lbl = g_strdup (_("_Stop Server")); break; case RUNMODE_STOPPED: msg = g_strdup (_("PureFTPd not running")); lbl = g_strdup (_("_Start Server")); break; } statusbar_pop (); statusbar_push (msg); g_free (msg); mnu_item = MW("mi_server_startstop"); mnu_label = gtk_bin_get_child (GTK_BIN (mnu_item)); gtk_label_set_text_with_mnemonic (GTK_LABEL (mnu_label), lbl); g_free (lbl); if (!cfg.cmd_startstop || *cfg.cmd_startstop == '\0' || ftp_runmode == RUNMODE_INETD) gtk_widget_set_sensitive (mnu_item, FALSE); else gtk_widget_set_sensitive (mnu_item, TRUE); } /* Creates and displays the popup-menu for the activities */ void gui_display_activity_popup (popup_src_t source) { static GtkWidget *mnu = NULL; GtkWidget *item; if (!mnu) mnu = DW("menu_act_popup"); /* Not all menu-items should be clickable (depending on where the user popped-up the menu) */ item = DW("mnu_close_tx"); if (source == POPUP_FROM_USRTREE) gtk_widget_set_sensitive (item, FALSE); else if (source == POPUP_FROM_ACTTREE) gtk_widget_set_sensitive (item, TRUE); gtk_menu_popup (GTK_MENU(mnu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time ()); } /* Appends a row to the activities list... */ void gui_add_to_activities (PGuiActivityRow line) { GtkTreeIter iter; static GtkWidget *tree_activities = NULL; static GtkTreeModel *model = NULL; if (!tree_activities) { tree_activities = MW("tree_activity"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_activities)); } gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ACT_ICON, line.icon, COL_ACT_TEXT, line.text, COL_ACT_ID, line.id, -1); } void gui_add_to_online_users (PGuiUserRow line) { GtkTreeIter iter; static GtkWidget *tree_users = NULL; static GtkTreeModel *model = NULL; if (!tree_users) { tree_users = MW("tree_users"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_users)); } gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_USR_ICON, line.icon, COL_USR_USER, line.user, COL_USR_HOST, line.host, COL_USR_NUM_CONNECTIONS, line.num_connections, -1); } void gui_clear_activity_list (void) { static GtkWidget *tree_activities = NULL; static GtkTreeModel *model = NULL; if (!tree_activities) { tree_activities = MW("tree_activity"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_activities)); } gtk_list_store_clear (GTK_LIST_STORE (model)); } void gui_clear_users_list (void) { static GtkWidget *tree_users = NULL; static GtkTreeModel *model = NULL; if (!tree_users) { tree_users = MW("tree_users"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_users)); } gtk_list_store_clear (GTK_LIST_STORE (model)); } void gui_update_info_frame (PActivity *a) { static GtkWidget *w_name = NULL; static GtkWidget *w_host = NULL; static GtkWidget *w_action = NULL; static GtkWidget *w_progress = NULL; static GtkWidget *w_elapsed = NULL; static GtkWidget *w_eta = NULL; static GtkWidget *p_progress = NULL; static GtkWidget *hbox_progress = NULL; gchar *tmp, *num_cur_str, *num_tot_str, *speed_str, *percent; #define DATE_STR_LEN 50 tmp = num_cur_str = num_tot_str = speed_str = percent = NULL; if (G_UNLIKELY (!w_name)) { w_name = MW("lbl_username"); w_host = MW("lbl_host"); w_action = MW("lbl_action"); w_progress = MW("lbl_progress"); w_elapsed = MW("lbl_elapsed_time"); w_eta = MW("lbl_remaining_time"); p_progress = MW("prog_progress"); hbox_progress = MW("hbox_advinfo_progress"); } if (!a) { /* Nothing sent, clear labels and hide progress bar */ gtk_label_set_text (GTK_LABEL (w_name), ""); gtk_label_set_text (GTK_LABEL (w_host), ""); gtk_label_set_text (GTK_LABEL (w_action), ""); gtk_label_set_text (GTK_LABEL (w_progress), ""); gtk_label_set_text (GTK_LABEL (w_elapsed), ""); gtk_label_set_text (GTK_LABEL (w_eta), ""); gtk_widget_hide (p_progress); return; } gtk_label_set_text (GTK_LABEL (w_name), a->username); gtk_label_set_text (GTK_LABEL (w_host), a->remote_addr); tmp = g_strdup_printf ("%s '%s'", a->state == FTPWHO_STATE_DOWNLOAD ? _("Downloading") : _("Uploading"), a->filename); gtk_label_set_text (GTK_LABEL (w_action), tmp); g_free (tmp); num_cur_str = get_size_string (a->download_current_size); // number_separate (a->download_current_size); speed_str = gen_speed_string (a->speed); /* If it's an upload, then we don't know the total size. */ if (a->state == FTPWHO_STATE_DOWNLOAD) { gdouble fraction = (gdouble) a->download_current_size / (gdouble) a->download_total_size; percent = g_strdup_printf ("%.2lf", 100.0 * fraction); num_tot_str = get_size_string (a->download_total_size); /* Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed */ tmp = g_strdup_printf (_("%s of %s (%s%%) %s"), num_cur_str, num_tot_str, percent, speed_str); gtk_progress_bar_set_text (GTK_PROGRESS_BAR(p_progress), tmp); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(p_progress), fraction); /* Show the progress bar instead of label */ gtk_widget_hide (w_progress); gtk_widget_show (p_progress); } else { /* Translators: This will become 'xx MiB at yy KiB/s' where xx is current * uploaded size and yy is the upload speed */ tmp = g_strdup_printf (_("%s at %s"), num_cur_str, speed_str); gtk_label_set_text (GTK_LABEL (w_progress), tmp); gtk_widget_hide (p_progress); gtk_widget_show (w_progress); } g_free (percent); g_free (num_cur_str); g_free (num_tot_str); g_free (speed_str); g_free (tmp); tmp = sec_to_time (a->online_since); gtk_label_set_text (GTK_LABEL (w_elapsed), tmp); if (a->speed == 0) tmp = g_strdup ("\342\210\236"); /* Infinity */ else if (a->download_total_size == 0) /* Translators: This refers to the time remaining of an up/download */ tmp = g_strdup_printf ("%s", _("Unknown")); else tmp = sec_to_time ((a->download_total_size - a->download_current_size) / a->speed); gtk_label_set_markup (GTK_LABEL (w_eta), tmp); g_free (tmp); } GtkWidget *gui_create_system_account_menu (GList *l) { GList *node; GtkWidget *menu, *menu_item; menu = gtk_menu_new (); node = g_list_first (l); while (node) { SystemAccount *a = (SystemAccount *) node->data; gchar *label = g_strdup_printf ("%s (%d)", a->name, a->id); menu_item = gtk_menu_item_new_with_label (label); g_free (label); g_object_set_data (G_OBJECT(menu_item), "account_id", GINT_TO_POINTER(a->id)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); node = g_list_next (node); } gtk_widget_show_all (menu); return menu; } GtkWidget *gui_create_menu_from_glist (GList *l) { GList *node; GtkWidget *menu, *menu_item; menu = gtk_menu_new (); node = g_list_first (l); while (node) { // SystemAccount *a = (SystemAccount *) node->data; // gchar *label = g_strdup_printf ("%s (%d)", a->name, a->id); menu_item = gtk_menu_item_new_with_label ((gchar *) node->data); // g_free (label); // g_object_set_data (G_OBJECT(menu_item), "account_id", GINT_TO_POINTER(a->id)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); node = g_list_next (node); } gtk_widget_show_all (menu); return menu; } struct _alert_dlg_info { const gchar *primary, *secondary; const gchar *icon_type; GtkWidget *parent; }; static GtkWidget *create_msgdialog (const struct _alert_dlg_info *info, gboolean show_chkbox) { GtkWidget *dlg_alert; GtkWidget *icon; GtkWidget *lbl; gchar *text; dlg_alert = DW("dlg_msg"); if (info->parent) gtk_window_set_transient_for (GTK_WINDOW (dlg_alert), GTK_WINDOW (info->parent)); icon = DW("dlg_msg_icon"); gtk_image_set_from_stock (GTK_IMAGE(icon), info->icon_type, GTK_ICON_SIZE_DIALOG); text = g_strdup_printf ("%s\n\n%s", info->primary, info->secondary); lbl = DW("dlg_msg_label"); gtk_label_set_markup (GTK_LABEL (lbl), text); g_free (text); gtk_widget_show_all (dlg_alert); if (!show_chkbox) gtk_widget_hide (DW("dlg_msg_chk")); return dlg_alert; } void gui_display_msgdialog (const gchar *primary, const gchar *secondary, const gchar *icon_type, GtkWidget *parent) { GtkWidget *dlg; struct _alert_dlg_info dlginfo; dlginfo.primary = primary; dlginfo.secondary = secondary; dlginfo.icon_type = icon_type; dlginfo.parent = parent; dlg = create_msgdialog (&dlginfo, FALSE); gtk_dialog_run (GTK_DIALOG (dlg)); gtk_widget_hide (dlg); } void gui_display_msgdialog_checkbox (const gchar *primary, const gchar *secondary, const gchar *icon_type, GtkWidget *parent, gboolean *show_again) { GtkWidget *dlg; struct _alert_dlg_info dlginfo; g_return_if_fail (show_again != NULL); dlginfo.primary = primary; dlginfo.secondary = secondary; dlginfo.icon_type = icon_type; dlginfo.parent = parent; dlg = create_msgdialog (&dlginfo, TRUE); gtk_dialog_run (GTK_DIALOG (dlg)); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (DW("dlg_msg_chk")))) *show_again = FALSE; else *show_again = TRUE; gtk_widget_hide (dlg); } static GtkWidget *create_imgbutton (const gchar *text, const gchar *icon_type) { GtkWidget *btn, *img, *lbl; GtkWidget *hbox, *alignment; btn = gtk_button_new (); alignment = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_container_add (GTK_CONTAINER (btn), alignment); hbox = gtk_hbox_new (FALSE, 2); gtk_container_add (GTK_CONTAINER (alignment), hbox); img = gtk_image_new_from_stock (icon_type, GTK_ICON_SIZE_BUTTON); gtk_box_pack_start (GTK_BOX (hbox), img, FALSE, FALSE, 0); lbl = gtk_label_new_with_mnemonic (text); gtk_box_pack_start (GTK_BOX (hbox), lbl, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (lbl), GTK_JUSTIFY_LEFT); gtk_widget_show_all (btn); return btn; } /* Creates and runs a HIGified confirmation dialog asking the user to confirm something. * Args: * primary: The 'header' text, keep short and descriptive * secondary: The longer description of the action to confirm * txt_btn_yes: Text to use instead of 'Yes' (if NULL, then stockbutton YES is used) * txt_btn_no: Text to use instead of 'No' (if NULL, then stockbutton NO is used) * parent: The parent window, can be NULL to ignore parent. * * Returns: * the GTK_RESPONSE_ID as returned by gtk_dialog_run(): * GTK_RESPONSE_YES : User pressed 'yes' * GTK_RESPONSE_NO : User pressed 'no' */ gint gui_display_confirmdialog (const gchar *primary, const gchar *secondary, const gchar *txt_btn_yes, const gchar *txt_btn_no, GtkWidget *parent) { GtkWidget *dlg_alert; GtkWidget *lbl; GtkWidget *btn_no, *btn_yes; gchar *text; gint ret; dlg_alert = DW("dlg_confirm"); if (parent) gtk_window_set_transient_for (GTK_WINDOW (dlg_alert), GTK_WINDOW (parent)); text = g_strdup_printf ("%s\n\n%s", primary, secondary); lbl = DW("dlg_confirm_label"); gtk_label_set_markup (GTK_LABEL (lbl), text); g_free (text); if (txt_btn_no == NULL) btn_no = gtk_button_new_from_stock (GTK_STOCK_NO); else btn_no = create_imgbutton (txt_btn_no, GTK_STOCK_NO); gtk_dialog_add_action_widget (GTK_DIALOG (dlg_alert), btn_no, GTK_RESPONSE_NO); GTK_WIDGET_SET_FLAGS (btn_no, GTK_CAN_DEFAULT); if (txt_btn_yes == NULL) btn_yes = gtk_button_new_from_stock (GTK_STOCK_YES); else btn_yes = create_imgbutton (txt_btn_yes, GTK_STOCK_YES); gtk_dialog_add_action_widget (GTK_DIALOG (dlg_alert), btn_yes, GTK_RESPONSE_YES); GTK_WIDGET_SET_FLAGS (btn_yes, GTK_CAN_DEFAULT); gtk_widget_show_all (dlg_alert); ret = gtk_dialog_run (GTK_DIALOG (dlg_alert)); gtk_widget_hide (dlg_alert); gtk_widget_destroy (btn_no); gtk_widget_destroy (btn_yes); return ret; } static gchar pixmap_directory[FILEPATH_MAX]; /* Use this function to set the directory containing installed pixmaps. */ void set_pixmap_directory (const gchar *directory) { strncpy (pixmap_directory, directory, FILEPATH_MAX); } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = g_strdup_printf ("%s%s%s", pixmap_directory, G_DIR_SEPARATOR_S, filename); if (!g_file_test (pathname, G_FILE_TEST_EXISTS)) { g_warning ("Couldn't find pixmap file: %s", filename); g_free (pathname); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { g_warning ("Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } void show_not_yet_implemented (GtkWindow *parent) { GtkWidget *dlg = gtk_message_dialog_new (parent, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "The requested feature is not yet implemented"); gtk_dialog_run (GTK_DIALOG(dlg)); gtk_widget_destroy (dlg); } pureadmin-0.4/src/purepw.h0000644000175000017500000000071510667602721012556 00000000000000#ifndef __PUREPW_H__ #define __PUREPW_H__ #include gboolean pw_add_user (const gchar *user, const gchar *passwd, GError **err); gboolean pw_remove_user (const gchar *user, GError **err); gboolean pw_user_exists (const gchar *user, GError **err); GList *pw_get_available_users (GError **err); PWInfo *pw_get_user_information (gchar *user, GError **err); gboolean pw_set_user_information (PWInfo * const i, GError **err); #endif /* __PUREPW_H__ */ pureadmin-0.4/src/prereq_usrmanager.c0000644000175000017500000002746010667602721014757 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Handles Pre-requistities for the user manager * * Copyright (C) 2006 - Isak Savo */ #include #include #include #include #include #include "cfg.h" #include "helper.h" #include "gui_helper.h" #include "globals.h" #include "system_accounts.h" #include "prereq_usrmanager.h" /* The columns in the GUI list */ enum { COL_CHANGETYPE, /* Not visible in the GUI */ COL_DESCRIPTION, COL_VALUE, COL_VALUE2, N_COLUMNS }; /* Callbacks */ static void cell_value1_edited_cb (GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data); static void cell_value2_edited_cb (GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data); static void init_prereq_window (void) { static GtkWidget *tree = NULL; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *model; if (tree) return; tree = DW("tree_system_changes"); model = gtk_list_store_new (N_COLUMNS, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (tree), GTK_TREE_MODEL (model)); g_object_unref (G_OBJECT (model)); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)), GTK_SELECTION_SINGLE); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (_("Action"), renderer, "text", COL_DESCRIPTION, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (_("Value"), renderer, "text", COL_VALUE, NULL); g_object_set(renderer, "editable", TRUE, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(cell_value1_edited_cb), GINT_TO_POINTER(COL_VALUE)); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (_("Numerical Value"), renderer, "text", COL_VALUE2, NULL); g_object_set(renderer, "editable", TRUE, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(cell_value2_edited_cb), GINT_TO_POINTER(COL_VALUE2)); } static gboolean is_pwfile_ok() { return g_file_test(cfg.pwfile, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR); } static gboolean is_default_home_ok () { return g_file_test (cfg.default_home, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR); } static gboolean is_default_gid_ok() { return (cfg.default_gid > 1 && sys_get_gid_exists(cfg.default_gid)); } static gboolean is_default_uid_ok() { return (cfg.default_uid > 1 && sys_get_uid_exists(cfg.default_uid)); } static SystemActions *get_required_actions (void) { SystemActions *rv = g_new0 (SystemActions, 1); if (!is_pwfile_ok()) { // It doesn't exist, get the guessed default value rv->pwfile = cfg_get_pftp_default_pwfile(); rv->changes |= CHANGES_CREATE_PWFILE; } if (!is_default_home_ok()) { rv->ftpdir = cfg_find_default_home(); rv->changes |= CHANGES_CREATE_HOMEDIR; } if (!is_default_gid_ok()) { rv->grp_id = sys_get_available_group_id(100); rv->ftpgroup = g_strdup ("ftpgroup"); rv->changes |= CHANGES_ADD_GROUP; } if (!is_default_uid_ok()) { rv->usr_id = sys_get_available_user_id(100); rv->ftpuser = g_strdup ("ftpuser"); rv->changes |= CHANGES_ADD_USER; } return rv; } static void append_row (SystemChangesType change, const gchar *description, const gchar *value, const gchar *value2) { static GtkWidget *tree = NULL; static GtkListStore *model; GtkTreeIter iter; if (tree == NULL) { tree = DW("tree_system_changes"); model = (GtkListStore*) gtk_tree_view_get_model(GTK_TREE_VIEW (tree)); } gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(model, &iter, COL_CHANGETYPE, change, COL_DESCRIPTION, description, COL_VALUE, value, COL_VALUE2, value2, -1); } static void clear_list(void) { GtkListStore *model = (GtkListStore*) gtk_tree_view_get_model (GTK_TREE_VIEW (DW("tree_system_changes"))); gtk_list_store_clear(model); } static gboolean take_required_actions (SystemActions *actions, GList **errors) { GError *err = NULL; gboolean ok, retval = TRUE; guint grp = cfg.default_gid; guint usr = cfg.default_uid; g_return_val_if_fail (errors != NULL && *errors == NULL, FALSE); if (actions->changes & CHANGES_ADD_GROUP) { ok = sys_create_group(actions->ftpgroup, actions->grp_id, &err); if (!ok) { *errors = g_list_append (*errors, g_strdup (err->message)); g_error_free(err); err = NULL; retval = FALSE; } else { cfg.default_gid = cfg_find_ftpgroup_gid(); grp = actions->grp_id; } } if (actions->changes & CHANGES_ADD_USER) { ok = sys_create_user(actions->ftpuser, actions->usr_id, grp, &err); if (!ok) { *errors = g_list_append (*errors, g_strdup (err->message)); g_error_free(err); err = NULL; retval = FALSE; } else { cfg.default_uid = cfg_find_ftpuser_uid(); usr = actions->usr_id; } } if (actions->changes & CHANGES_CREATE_HOMEDIR) { ok = misc_create_directory(actions->ftpdir, (usr > 0 ? usr : -1), (grp > 0 ? grp : -1), &err); if (!ok) { *errors = g_list_append (*errors, g_strdup (err->message)); g_error_free(err); err = NULL; retval = FALSE; } g_free (cfg.default_home); cfg.default_home = g_strdup (actions->ftpdir); } if (actions->changes & CHANGES_CREATE_PWFILE) { ok = misc_create_passwd_file(actions->pwfile); if (!ok) { *errors = g_list_append (*errors, g_strdup (err->message)); g_error_free(err); err = NULL; retval = FALSE; } g_free (cfg.pwfile); g_free (cfg.pdbfile); cfg.pwfile = g_strdup (actions->pwfile); gchar *fnamebase = filename_without_extension(actions->pwfile); cfg.pdbfile = g_strconcat (fnamebase, ".pdb", NULL); } return retval; } static void populate_actions (SystemActions *actions) { if (actions->changes & CHANGES_ADD_GROUP) { gchar newgid[10]; g_snprintf(newgid, 10, "%u", actions->grp_id); append_row(CHANGES_ADD_GROUP, _("Add a dedicated ftp system group"), actions->ftpgroup, newgid); } if (actions->changes & CHANGES_ADD_USER) { gchar newuid[10]; g_snprintf(newuid, 10, "%u", actions->usr_id); append_row(CHANGES_ADD_USER, _("Add a dedicated ftp system user"), actions->ftpuser, newuid); } if (actions->changes & CHANGES_CREATE_HOMEDIR) { append_row (CHANGES_CREATE_HOMEDIR, _("Create a default home directory for ftp users"), actions->ftpdir, NULL); } if (actions->changes & CHANGES_CREATE_PWFILE) append_row(CHANGES_CREATE_PWFILE, _("Create a new password file for ftp users"), actions->pwfile, NULL); } /**** Global Functions ****/ gboolean prereq_show_dialog (GtkWindow *parent) { init_prereq_window(); gboolean rv = FALSE;; SystemActions *a = get_required_actions(); populate_actions(a); g_object_set_data_full(G_OBJECT(DW("dlg_prepare_usermanager")), "systemactions", a, (GDestroyNotify) system_actions_free); if (parent) gtk_window_set_transient_for(GTK_WINDOW (DW("dlg_prepare_usermanager")), parent); GtkResponseType response = gtk_dialog_run(GTK_DIALOG(DW("dlg_prepare_usermanager"))); if (response == GTK_RESPONSE_YES) { a = g_object_get_data(G_OBJECT(DW("dlg_prepare_usermanager")), "systemactions"); GList *errors = NULL; if (!take_required_actions (a, &errors)) { pur_log_wrn ("Couldn't take action:"); GList *node = errors; while (node) { pur_log_wrn((gchar*)node->data); g_free (node->data); node = g_list_next(node); } g_list_free(node); } else rv = TRUE; } clear_list(); gtk_widget_hide(DW("dlg_prepare_usermanager")); return rv; } gboolean prereq_are_all_requirements_met (void) { if (!is_default_gid_ok()) return FALSE; if (!is_default_uid_ok()) return FALSE; if (!is_default_home_ok()) return FALSE; if (!is_pwfile_ok()) return FALSE; return TRUE; } void system_actions_free (SystemActions *actions) { g_free (actions->ftpuser); g_free (actions->ftpgroup); g_free (actions->ftpdir); g_free (actions->pwfile); g_free (actions); } static gboolean is_valid_system_name (const gchar *str) { if (!str || *str == '\0') return FALSE; const gchar *p = str; while (*p) { if (!g_ascii_isalpha(*p)) return FALSE; p++; } return TRUE; } /**** Callbacks ****/ static void cell_value1_edited_cb (GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data) { GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (DW("tree_system_changes"))); GtkTreeIter iter; SystemActions *actions; SystemChangesType change_type; gtk_tree_model_get_iter_from_string(model, &iter, path); gtk_tree_model_get(model, &iter, COL_CHANGETYPE, &change_type, -1); actions = g_object_get_data(G_OBJECT(DW("dlg_prepare_usermanager")), "systemactions"); g_return_if_fail (actions != NULL); switch (change_type) { case CHANGES_ADD_GROUP: case CHANGES_ADD_USER: // Username column if (!is_valid_system_name(new_text)) { gui_display_msgdialog("Invalid Name", "The text you entered contains illegal characters. Only english characters are allowed", MSGDLG_TYPE_ERROR, DW("dlg_prepare_usermanager")); } else { gtk_list_store_set (GTK_LIST_STORE(model), &iter, COL_VALUE, new_text, -1); /* Update the action object */ if (change_type == CHANGES_ADD_GROUP) { g_free (actions->ftpgroup); actions->ftpgroup = g_strdup (new_text); } else { g_free (actions->ftpuser); actions->ftpuser = g_strdup (new_text); } } break; case CHANGES_CREATE_HOMEDIR: case CHANGES_CREATE_PWFILE: if (!g_path_is_absolute(new_text)) gui_display_msgdialog("Invalid Directory", "The entered directory is not a valid location", MSGDLG_TYPE_ERROR, DW("dlg_prepare_usermanager")); else { gtk_list_store_set (GTK_LIST_STORE(model), &iter, COL_VALUE, new_text, -1); if (change_type == CHANGES_CREATE_HOMEDIR) { g_free (actions->ftpdir); actions->ftpdir = g_strdup (new_text); } else { g_free (actions->pwfile); actions->pwfile = g_strdup (new_text); } } break; } } static void cell_value2_edited_cb (GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data) { GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (DW("tree_system_changes"))); GtkTreeIter iter; SystemActions *actions; SystemChangesType change_type; gtk_tree_model_get_iter_from_string(model, &iter, path); gtk_tree_model_get(model, &iter, COL_CHANGETYPE, &change_type, -1); actions = g_object_get_data(G_OBJECT(DW("dlg_prepare_usermanager")), "systemactions"); g_return_if_fail (actions != NULL); guint num = atoi(new_text); if (num == 0) return; g_free (new_text); new_text = g_strdup_printf ("%d", num); if (change_type == CHANGES_ADD_GROUP) actions->grp_id = num; else if (change_type == CHANGES_ADD_USER) actions->usr_id = num; else { /* FIXME; Write a better message */ gui_display_msgdialog("Invalid Setting", "You cannot set this field since this row does not allow it!", MSGDLG_TYPE_ERROR, DW("dlg_prepare_usermanager")); } } pureadmin-0.4/src/system_accounts.c0000644000175000017500000001670010667602721014453 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Misc functions used to handle system accounts * * Copyright (C) 2006 Isak Savo */ #include #include #include #include #include #include #include #include #include #include "globals.h" #include "cfg.h" #include "helper.h" #include "system_accounts.h" /*******************************************/ /* Private Functions */ /*******************************************/ typedef enum { USERS, GROUPS } AccountType; static gint cmp_system_accounts (SystemAccount *a, SystemAccount *b) { if (a->id < b->id) return -1; else if (a->id > b->id) return 1; return 0; } static GList *internal_get_system_ids(AccountType what) { FILE *fl; GList *retval = NULL; gchar buf[LINE_MAX], **arr; gchar *filename; if (what == USERS) filename = "/etc/passwd"; else filename = "/etc/group"; if ((fl = fopen (filename, "r")) == NULL) { pur_log_wrn ("Unable to open file %s: %s", filename, g_strerror(errno)); return NULL; } while (fgets (buf, LINE_MAX, fl)) { arr = g_strsplit (buf, ":", -1); if (arr_count (arr) < 2) { g_strfreev (arr); continue; } SystemAccount *account = g_new0 (SystemAccount, 1); if (arr[0][0] && arr[2][0] && atoi (arr[2]) > 0) { account->id = atoi(arr[2]); account->name = g_strdup (arr[0]); retval = g_list_insert_sorted (retval, account, (GCompareFunc) cmp_system_accounts); } g_strfreev (arr); } fclose (fl); return g_list_first (retval); } static GList *internal_get_system_ids_str(AccountType what) { GList *list = internal_get_system_ids(what); GList *node = list; while (node) { SystemAccount *a = (SystemAccount*) node->data; node->data = g_strdup_printf("%s (%d)", a->name, a->id); system_account_free(a); node = g_list_next(node); } return list; } static gboolean internal_get_account_id_exists(AccountType what, guint id) { GList *ids = internal_get_system_ids(what); GList *node = ids; gboolean found = FALSE; while (node) { SystemAccount *a = (SystemAccount*) node->data; if (a->id == id) { found = TRUE; /* We keep iterating the entire loop since we want to free all node data */ } system_account_free(a); node = g_list_next(node); } g_list_free(ids); return found; } static guint internal_find_available_account_id(AccountType what, guint min_id) { GList *list = internal_get_system_ids(what); GList *node = list; guint last_id = 0, rv = 0; while (node) { SystemAccount *a = (SystemAccount *) node->data; node = g_list_next(node); if (a->id <= min_id) continue; if (a->id > last_id + 1 && last_id > min_id) { rv = last_id + 1; break; } last_id = a->id; } system_account_list_free(list); if (rv == 0) rv = last_id + 1; return rv; } /*******************************************/ /* Public Functions */ /*******************************************/ GList *sys_get_user_ids (void) { return internal_get_system_ids(USERS); } GList *sys_get_group_ids (void) { return internal_get_system_ids(GROUPS); } GList *sys_get_user_ids_str (void) { return internal_get_system_ids_str(USERS); } GList *sys_get_group_ids_str (void) { return internal_get_system_ids_str(GROUPS); } gboolean sys_get_uid_exists(guint uid) { return internal_get_account_id_exists(USERS, uid); } gboolean sys_get_gid_exists(guint gid) { return internal_get_account_id_exists(GROUPS, gid); } guint sys_get_available_user_id (guint min_id) { return internal_find_available_account_id(USERS, min_id); } guint sys_get_available_group_id (guint min_id) { return internal_find_available_account_id(GROUPS, min_id); } gboolean sys_create_user (const gchar *username, guint userid, guint groupid, GError **err) { gint child_retval; gboolean ret; GError *spawn_err = NULL; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if (!cfg.cmd_useradd) { g_set_error (err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_COMMAND_NOT_FOUND, "Command 'useradd' isn't available"); return FALSE; } if (!MISC_VALID_STRING(username)) { g_set_error(err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "Invalid username"); return FALSE; } gchar *cmd = g_strdup_printf ("%s -u %d -g %d -d /dev/null -c 'PureFTP User' -s /etc %s", cfg.cmd_useradd, userid, groupid, username); pur_log_dbg ("Running command [%s]", cmd); ret = g_spawn_command_line_sync (cmd, NULL, NULL, &child_retval, &spawn_err); g_free (cmd); child_retval = (signed char) WEXITSTATUS(child_retval); if (child_retval){ g_set_error (err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "Child '%s' returned abnormally: %d", cfg.cmd_useradd, child_retval); return FALSE; } if (!ret) { g_set_error (err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "Couldn't spawn child process '%s': %s", cfg.cmd_useradd, spawn_err->message); g_error_free(spawn_err); return FALSE; } return TRUE; } /* Creates a new group with the specified name and id. If 'groupid' is 0, the groupadd command will pick one * instead. */ gboolean sys_create_group (const gchar *groupname, guint groupid, GError **err) { gboolean ret; gint child_retval; GError *spawn_err = NULL; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if (!cfg.cmd_groupadd) { g_set_error (err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_COMMAND_NOT_FOUND, "Command 'groupadd' isn't available"); return FALSE; } if (!MISC_VALID_STRING(groupname)) { g_set_error(err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "One or more arguments was incorrect"); return FALSE; } gchar *cmd; if (groupid > 0) cmd = g_strdup_printf ("%s -g %d %s", cfg.cmd_groupadd, groupid, groupname); else cmd = g_strdup_printf ("%s %s", cfg.cmd_groupadd, groupname); pur_log_dbg ("Running command [%s]", cmd); ret = g_spawn_command_line_sync (cmd, NULL, NULL, &child_retval, &spawn_err); g_free (cmd); child_retval = (signed char) WEXITSTATUS(child_retval); if (child_retval){ g_set_error (err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "Child '%s' returned abnormally: %d", cfg.cmd_groupadd, child_retval); return FALSE; } if (!ret) { g_set_error (err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "Couldn't spawn child process '%s': %s", cfg.cmd_groupadd, spawn_err->message); g_error_free(spawn_err); return FALSE; } return TRUE; } /* Frees one SystemAccount object */ void system_account_free(SystemAccount *account) { if (account == NULL) return; g_free (account->name); g_free (account); } /* Frees a GList containing SystemAccount objects */ void system_account_list_free (GList *list) { g_list_foreach(list, (GFunc) system_account_free, NULL); g_list_free (list); } pureadmin-0.4/src/mainwin.c0000644000175000017500000003510310667602721012670 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Callback-functions for the main window GUI. * * Copyright (C) 2003- Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "mainwin.h" #include "globals.h" #include "srv_comm.h" #include "gui_helper.h" #include "helper.h" #include "cfg.h" #include "logfile.h" /** Private functions **/ /* Called for all remaining elements in the hash table. It adds those entries to * a GList */ static gboolean rmd_users_func (gchar *key, gchar *val, GList **lst_p) { *lst_p = g_list_append (*lst_p, g_strdup(key)); return TRUE; } static GList *find_completed_activities (GList *old, GList *new) { GList *node; GList *rv = NULL; if (old == NULL) return NULL; if (new == NULL) return old; node = old; while (node) { guint id_oldlist = ((PActivity*) node->data)->id; GList *new2 = new; /* Search the entire new list for any occurrance of the current activity in the old list */ while (new2) { guint id_newlist = ((PActivity*) new2->data)->id; if (id_oldlist > id_newlist) { /* No need to search the list anymore, we know it doesn't exist in the new list since * both lists are sorted by ID*/ rv = g_list_append (rv, node->data); break; } if (id_oldlist == id_newlist) /* The same activity exists in both lists, nothing more to do this iteration */ break; new2 = g_list_next (new2); } node = g_list_next (node); } return rv; } struct usrlist_diff { GList *new_users; GList *rmd_users; }; static struct usrlist_diff *compare_user_lists (GList *L1, GList *L2) { GHashTable *h; GList *node; POnlineUser *u; struct usrlist_diff *rv = g_new0 (struct usrlist_diff, 1); h = g_hash_table_new_full ((GHashFunc) g_str_hash, (GEqualFunc) g_str_equal, (GDestroyNotify) g_free, NULL); node = L1; while (node) { /* Add all elements from list 1 to a hash table with username@host as key and random junk as value * (we're only interested in O(1) lookup of users, not any values) */ gchar *tmp; u = (POnlineUser *) node->data; tmp = g_strconcat (u->username, "@", u->remote_addr, NULL); g_hash_table_insert (h, tmp, "random junk"); node = node->next; } node = L2; while (node) { gchar *tmp; u = (POnlineUser *) node->data; tmp = g_strconcat (u->username, "@", u->remote_addr, NULL); if (g_hash_table_lookup (h, tmp)) { /* User:Address pair existed earlier */ g_hash_table_remove (h, tmp); } else { /* Whooo, a new user! */ rv->new_users = g_list_append (rv->new_users, tmp); g_hash_table_remove (h, tmp); } node = node->next; } if (g_hash_table_size (h) > 0) { /* One or more users have disconnected */ g_hash_table_foreach_remove (h,(GHRFunc) rmd_users_func, (gpointer) &(rv->rmd_users)); } return rv; } void user_list_select_user (const gchar *user, const gchar *remote_addr) { GtkTreeModel *model = NULL; GtkTreeIter iter; gboolean more; model = gtk_tree_view_get_model (GTK_TREE_VIEW(MW("tree_users"))); g_return_if_fail (user != NULL && *user != '\0'); g_return_if_fail (model != NULL); more = gtk_tree_model_get_iter_first (model, &iter); while (more) { gchar *cur_user, *cur_addr; gtk_tree_model_get(model, &iter, COL_USR_USER, &cur_user, COL_USR_HOST, &cur_addr, -1); if (g_str_equal (cur_user, user) && g_str_equal (cur_addr, remote_addr)) { gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW(MW("tree_users"))), &iter); break; } more = gtk_tree_model_iter_next (model, &iter); } } void init_gui_mainwindow (void) { GtkWidget *pane; GdkPixbuf *pbuf; GList *list = NULL; gint i; #define NUM_WINDOW_ICONS 4 const gchar *icons[NUM_WINDOW_ICONS] = { "pureadmin-16x16.png", "pureadmin-24x24.png", "pureadmin-32x32.png", "pureadmin-48x48.png" }; if (cfg.save_window_geometry == FALSE) { pur_log_nfo ("Will not restore window geometry, option turned off"); return; } /* Set position */ gtk_window_move (GTK_WINDOW (MW("main_window")), cfg.win_pos[0], cfg.win_pos[1]); /* Set size */ gtk_window_resize (GTK_WINDOW (MW("main_window")), cfg.win_size[0], cfg.win_size[1]); /* Divider position */ pane = MW("hpaned1"); if (!pane) { pur_log_wrn ("Unable to get hpaned widget"); } else gtk_paned_set_position (GTK_PANED (pane), cfg.div_pos); for (i = 0; i < NUM_WINDOW_ICONS; i++) { GError *err; gchar *fname; err = NULL; fname = g_build_filename (pixmapdir, icons[i], NULL); pbuf = gdk_pixbuf_new_from_file (fname, &err); if (!pbuf) { pur_log_wrn ("Couldn't load icon file %s: %s", icons[i], err->message); g_error_free (err); } list = g_list_append (list,(gpointer) pbuf); g_free (fname); } if (list) { GList *node = list; gtk_window_set_default_icon_list (list); while (node) { g_object_unref (G_OBJECT(node->data)); node = g_list_next (node); } g_list_free (list); } else pur_log_wrn ("No icons existed in %s", pixmapdir); show_status_icon ("PureAdmin started successfully"); #undef NUM_WINDOW_ICONS } void init_gui_logwindow (void) { GtkWidget *tmp, *lbl; GtkTextBuffer *text; pur_log_dbg ("Initializing gui_logwindow"); tmp = MW("logview"); text = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); logview_tags[LOG_INFO] = gtk_text_buffer_create_tag (text, "info", "foreground", "blue", NULL); logview_tags[LOG_WARNING] = gtk_text_buffer_create_tag (text, "warning", "foreground", "#2e9344", NULL); logview_tags[LOG_ERROR] = gtk_text_buffer_create_tag (text, "error", "foreground", "red", NULL); logview_tags[LOG_NOTICE] = gtk_text_buffer_create_tag (text, "notice", "foreground", "#a427a9", NULL); logview_tags[LOG_DEBUG] = gtk_text_buffer_create_tag (text, "debug", "foreground", "#899f22", NULL); lbl = MW("lbl_logfilename"); #ifdef HAVE_LIBFAM gtk_label_set_text (GTK_LABEL (lbl), cfg.logfile); #else /* Disable logview controls and print a message explaining why! */ log_display_error_text (0); #endif } void init_gui_activities (void) { GtkListStore *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeView *tree_activity; //GtkTreeSelection *selection; pur_log_dbg ("Initializing gui_activities"); /* Set-up treeview */ tree_activity = GTK_TREE_VIEW (MW("tree_activity")); g_return_if_fail (tree_activity != NULL); model = gtk_list_store_new (N_ACT_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT); gtk_tree_view_set_model (GTK_TREE_VIEW (tree_activity), GTK_TREE_MODEL (model)); g_object_unref (G_OBJECT (model)); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_activity)), GTK_SELECTION_SINGLE); renderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "pixbuf", COL_ACT_ICON, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree_activity), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "text", COL_ACT_TEXT, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree_activity), column); /* /\* Hook-up some signals *\/ */ /* selection = gtk_tree_view_get_selection (tree_activity); */ /* g_signal_connect ((gpointer) selection, "changed", */ /* G_CALLBACK (booh), */ /* NULL); */ } void init_gui_online_users (void) { gint i; gchar *titles[] = { " ", _("User"), _("Host"), _("Connections") }; GtkListStore *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeView *tree_users; /* Set-up treeview */ pur_log_dbg ("Initializing gui_online_users"); tree_users = GTK_TREE_VIEW (MW("tree_users")); model = gtk_list_store_new (N_USR_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); gtk_tree_view_set_model (GTK_TREE_VIEW (tree_users), GTK_TREE_MODEL (model)); g_object_unref (G_OBJECT (model)); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_users)), GTK_SELECTION_SINGLE); renderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new_with_attributes (titles[0], renderer, "pixbuf", COL_USR_ICON, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree_users), column); for (i = 1; i < N_USR_COLUMNS; i++) { renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (titles[i], renderer, "text", i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree_users), column); } /* Hook-up some signals */ /* selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (main_treeview)); g_signal_connect ((gpointer) selection, "changed", G_CALLBACK (on_list_selection_changed), NULL);*/ } gboolean timeout_update_activity (gpointer data) { GList *act_list, *usr_list, *node; PActivity *activity; POnlineUser *user; struct usrlist_diff *diff = NULL; static GdkPixbuf *icon_up = NULL; static GdkPixbuf *icon_down = NULL; static GdkPixbuf *icon_user = NULL; static GtkTreeView *tree_activity = NULL, *tree_users = NULL; static GtkTreeModel *model = NULL, *model_users = NULL; static GtkTreeSelection *sel = NULL, *sel_users = NULL; static GList *prev_usr_list; static GList *prev_act_list; GtkTreeIter iter; GtkTreePath *act_path, *usr_path; PGuiActivityRow arow; PGuiUserRow urow; gchar *percent; gboolean restore_selection_act = FALSE, restore_selection_usr = FALSE; if (G_UNLIKELY (!has_initialized(FALSE))) return TRUE; if (G_UNLIKELY (prog_exiting)) { g_print ("Timeout aborting\n"); return FALSE; } if (G_UNLIKELY (!icon_up)) { icon_up = create_pixbuf ("up.png"); icon_down = create_pixbuf ("down.png"); icon_user = create_pixbuf ("user.png"); } if (G_UNLIKELY (!tree_activity)) { tree_activity = (GtkTreeView *) MW("tree_activity"); model = gtk_tree_view_get_model (tree_activity); sel = gtk_tree_view_get_selection (tree_activity); tree_users = (GtkTreeView *) MW("tree_users"); model_users = gtk_tree_view_get_model (tree_users); sel_users = gtk_tree_view_get_selection (tree_users); } restore_selection_act = gtk_tree_selection_get_selected (sel, &model, &iter); if (restore_selection_act) act_path = gtk_tree_model_get_path (model, &iter); else act_path = NULL; restore_selection_usr = gtk_tree_selection_get_selected (sel_users, &model_users, &iter); if (restore_selection_usr) usr_path = gtk_tree_model_get_path (model_users, &iter); else usr_path = NULL; gui_clear_activity_list (); gui_clear_users_list (); act_list = srv_get_activities (); node = g_list_first (act_list); while (node) { activity = (PActivity *) node->data; if (activity->state == FTPWHO_STATE_DOWNLOAD) arow.icon = icon_down; else if (activity->state == FTPWHO_STATE_UPLOAD) arow.icon = icon_up; else { /* Only append actual actions (DL/UL) */ node = g_list_next (node); continue; } arow.id = activity->id; if (activity->download_total_size > 0) percent = g_strdup_printf ("%.2f", 100 * (double) activity->download_current_size / (double) activity->download_total_size); else percent = g_strdup ("??"); arow.text = g_strdup_printf ("%s (%s):'%s' - (%s%%)", activity->username, activity->remote_addr, activity->filename, percent); gui_add_to_activities (arow); node = g_list_next (node); g_free (arow.text); g_free (percent); } if (restore_selection_act) { gtk_tree_selection_select_path (sel, act_path); g_signal_emit_by_name ((gpointer) tree_activity, "cursor_changed", tree_activity, NULL); } /* Update users list */ usr_list = srv_get_connected_users (g_list_first (act_list)); node = usr_list; urow.icon = icon_user; while (node) { user = (POnlineUser *) node->data; urow.user = string_from_vuser_locale (user->username); urow.host = g_strdup (user->remote_addr); urow.num_connections = user->num_connections; gui_add_to_online_users (urow); g_free (urow.user); g_free (urow.host); node = g_list_next (node); } diff = compare_user_lists (prev_usr_list, usr_list); if (diff->new_users || diff->rmd_users) { GString *msg = g_string_new (""); gint len = g_list_length (diff->new_users); if (len == 1) { gchar *tmp = pur_elipzise ((gchar *) diff->new_users->data, 20); g_string_append_printf (msg, "New connection from %s\n", tmp); } else if (len > 1) g_string_append_printf (msg, "%d new connections\n", len); len = g_list_length (diff->rmd_users); if (len == 1) { gchar *tmp = pur_elipzise ((gchar *) diff->rmd_users->data, 20); g_string_append_printf (msg, "%s has disconnected\n", tmp); } else if (len > 1) g_string_append_printf (msg, "%d users has disconnected\n", len); if (msg->str[msg->len-1] == '\n') g_string_truncate (msg, msg->len - 1); show_status_icon (msg->str); g_string_free (msg, TRUE); g_list_foreach (diff->new_users, (GFunc) g_free, NULL); g_list_foreach (diff->rmd_users, (GFunc) g_free, NULL); g_list_free (diff->new_users); g_list_free (diff->rmd_users); g_free (diff); } free_pouser_list (prev_usr_list); prev_usr_list = usr_list; if (cfg.always_notify_activities) { GList *done_activities = find_completed_activities(prev_act_list, act_list); node = done_activities; while (node) { PActivity *act = (PActivity *) node->data; gchar *body = g_strdup_printf (_("User '%s' has finished %s the file '%s'"), act->username, act->state == FTPWHO_STATE_DOWNLOAD ? _("downloading") : _("uploading"), act->filename); send_notification (_("FTP Activity Completed"), body); node = g_list_next (node); } } free_activity_list (prev_act_list); prev_act_list = act_list; if (restore_selection_usr) gtk_tree_selection_select_path (sel_users, usr_path); // gui_update_menu_sensivity (); /* Always return TRUE */ return TRUE; } pureadmin-0.4/src/prefwin.h0000644000175000017500000000276310667602721012713 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Preferences management - the GUI-part. * */ #ifndef __PREFWIN_H__ #define __PREFWIN_H__ typedef struct prefwin_widgets_ { GtkWidget *menu_uid, *menu_gid, *home, *encoding; GtkWidget *hbox_tip, *btn_create_id; GtkWidget *cmd_purepw, *pwfile, *pdbfile; GtkWidget *btn_search, *chk_resolve, *btn_home_browse, *btn_encoding_sel; GtkWidget *btn_browse_purepw, *btn_browse_pw, *btn_browse_pdb; GtkWidget *rdo_syslog, *rdo_custom, *logfile; GtkWidget *chk_save_window_geo, *chk_use_system_encoding; GtkWidget *chk_use_tray_icon, *chk_always_notify; } prefwin_widgets; typedef struct pa_encoding_t_ { gchar *realname; gchar *label; } pa_encoding_t; GtkWidget *pref_init_prefwindow (GtkWidget *parent); #endif /* __PREFWIN_H__ */ pureadmin-0.4/src/helpview.c0000644000175000017500000002121510667602721013050 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Functions for displaying help in the application. * * Copyright (C) 2003 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "binreloc.h" #include "gui_helper.h" #include "globals.h" #include "helper.h" #include "helpview.h" static gulong hlp_menu_changed_id = 0; static const gchar *nodes[NUM_HLP_ITEMS][2] = { /* filename (w/o .txt extension) : Human readable name (w/ mnemonic) */ {"index", N_("Inde_x")}, {"", ""}, /* Separator */ {"introduction", N_("_Introduction")}, {"main_window", N_("_Main Window")}, {"user_manager", N_("_User Manager")}, {"preferences", N_("_Preferences")}, }; /* void hlp_create_helpview (void); */ /* void hlp_select_node (hlp_items_t node); */ /* void menu_callback (GtkOptionMenu *menu, gpointer user_data); */ /* void hlp_hide (GtkButton *btn, gpointer user_data); */ /* void hlp_select_menuitem (hlp_items_t node); */ typedef struct _helpview { GtkWidget *win; GtkWidget *text; GtkWidget *menu; gchar *cur_node; } HelpView_t; static HelpView_t *hw = NULL; static void hlp_select_menuitem (hlp_items_t node) { g_signal_handler_block (hw->menu, hlp_menu_changed_id); gtk_option_menu_set_history (GTK_OPTION_MENU (hw->menu), node); g_signal_handler_unblock (hw->menu, hlp_menu_changed_id); g_signal_emit_by_name (hw->menu, "changed", hw->menu, NULL); } static void hlp_select_node (hlp_items_t node) { GtkTextBuffer *buf; GtkTextIter iter; gchar *filename, line[LINE_MAX]; FILE *fl; if (hw->cur_node && strcmp (hw->cur_node, nodes[node][0]) == 0) return; filename = g_strconcat(docdir, G_DIR_SEPARATOR_S, nodes[node][0], ".txt", NULL); //strdup_printf ("%s/%s.txt", PUR_DOC_DIR, nodes[node][0]); pur_log_dbg ("Opening helpfile: %s", filename); if (!g_file_test (filename, G_FILE_TEST_EXISTS)) { g_free (filename); filename = g_strconcat(docdir, G_DIR_SEPARATOR_S, nodes[0][0], ".txt", NULL); //g_strdup_printf ("%s/%s.txt", PUR_DOC_DIR, nodes[0][0]); pur_log_wrn ("Helpfile not found, opening %s", filename); if (!g_file_test (filename, G_FILE_TEST_EXISTS)) { pur_log_wrn ("Helpfile %s not found either, aborting!!", filename); g_free (filename); return; } /* Force change of GUI-menu. This will trigger appropriate signals.. */ hlp_select_menuitem (0); return; } buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (hw->text)); gtk_text_buffer_set_text (buf, "", -1); gtk_text_buffer_get_iter_at_offset (buf, &iter, 0); if ((fl = fopen (filename, "r")) == NULL) { pur_log_wrn ("Unable to open helpfile: %s", strerror(errno)); g_free (filename); return; } while (fgets (line, LINE_MAX, fl)) { gtk_text_buffer_insert (buf, &iter, line, -1); } fclose (fl); if (hw->cur_node) g_free (hw->cur_node); hw->cur_node = g_strdup (nodes[node][0]); g_free (filename); } static void menu_callback (GtkOptionMenu *menu, gpointer user_data) { gint i; i = gtk_option_menu_get_history (menu); if (i != -1) hlp_select_node (i); } static void hlp_hide (GtkButton *btn, gpointer user_data) { gtk_widget_hide (hw->win); } static GtkWidget *hlp_fill_menu (void) { GtkWidget *menu, *img, *sep, *node; gint i; menu = gtk_menu_new (); node = gtk_image_menu_item_new_with_mnemonic (_(nodes[HLP_ITEM_INDEX][1])); gtk_widget_show (node); gtk_container_add (GTK_CONTAINER (menu), node); img = gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU); gtk_widget_show (img); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (node), img); sep = gtk_menu_item_new (); gtk_widget_show (sep); gtk_container_add (GTK_CONTAINER (menu), sep); gtk_widget_set_sensitive (sep, FALSE); for (i = 2; i < NUM_HLP_ITEMS; i++) { node = gtk_menu_item_new_with_mnemonic (_(nodes[i][1])); gtk_widget_show (node); gtk_container_add (GTK_CONTAINER (menu), node); } return menu; } /* FIXME: This should be done in Glade instead */ static void hlp_create_helpview (void) { GtkWidget *win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *lbl; GtkWidget *menu; GtkWidget *menu_items; GtkWidget *scr_win; GtkWidget *text; GtkWidget *hbuttonbox2; GtkWidget *button2; GdkPixbuf *icon; GtkTextBuffer *buf; PangoFontDescription *font_desc; win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (win), _("PureAdmin: Help")); gtk_widget_set_size_request (win, 550, 600); vbox = gtk_vbox_new (FALSE, 4); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (win), vbox); icon = gtk_widget_render_icon (GTK_WIDGET (win), GTK_STOCK_HELP, GTK_ICON_SIZE_MENU, NULL); gtk_window_set_icon (GTK_WINDOW (win), icon); gdk_pixbuf_unref (icon); hbox = gtk_hbox_new (FALSE, 12); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); lbl = gtk_label_new (_("Select chapter:")); gtk_widget_show (lbl); gtk_box_pack_start (GTK_BOX (hbox), lbl, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (lbl), GTK_JUSTIFY_LEFT); menu = gtk_option_menu_new (); gtk_widget_show (menu); gtk_box_pack_start (GTK_BOX (hbox), menu, FALSE, FALSE, 0); menu_items = hlp_fill_menu (); gtk_option_menu_set_menu (GTK_OPTION_MENU (menu), menu_items); hlp_menu_changed_id = g_signal_connect ((gpointer) menu, "changed", G_CALLBACK (menu_callback), NULL); scr_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scr_win); gtk_box_pack_start (GTK_BOX (vbox), scr_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); text = gtk_text_view_new (); gtk_widget_show (text); gtk_container_add (GTK_CONTAINER (scr_win), text); gtk_text_view_set_editable (GTK_TEXT_VIEW (text), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text), GTK_WRAP_WORD); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text), FALSE); gtk_text_view_set_left_margin (GTK_TEXT_VIEW (text), 5); buf = gtk_text_buffer_new (NULL); /* Change default font throughout the widget */ font_desc = pango_font_description_from_string ("Monospace"); gtk_widget_modify_font (text, font_desc); pango_font_description_free (font_desc); gtk_text_view_set_buffer (GTK_TEXT_VIEW (text), buf); hbuttonbox2 = gtk_hbutton_box_new (); gtk_widget_show (hbuttonbox2); gtk_box_pack_start (GTK_BOX (vbox), hbuttonbox2, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox2), 6); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END); button2 = gtk_button_new_from_stock ("gtk-close"); gtk_widget_show (button2); gtk_container_add (GTK_CONTAINER (hbuttonbox2), button2); GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) button2, "clicked", G_CALLBACK (hlp_hide), NULL); g_signal_connect ((gpointer) win, "delete-event", G_CALLBACK (gtk_widget_hide), NULL); hw = g_new0 (HelpView_t, 1); hw->win = win; hw->text = text; hw->menu = menu; } /** GLOBAL FUNCTIONS **/ /* hlp_terminate: Destroys the help window and frees any allocated * resources. */ void hlp_terminate (void) { if (hw) { gtk_widget_destroy (hw->win); if (hw->cur_node) g_free (hw->cur_node); } g_free (hw); hw = NULL; } /* hlp_show_help: Shows the help window and displays the selected node. * * Arguments: node The help node to show * */ void hlp_show_help (hlp_items_t node) { pur_log_dbg ("Docdir: %s", docdir); if (!g_file_test (docdir, G_FILE_TEST_EXISTS)) { pur_log_wrn ("Docdir %s doesn't exist!", docdir); gui_display_msgdialog (_("Help not found"), _("PureAdmin could not find the helpfiles." "Try reinstalling PureAdmin to see if that solves the problem."), MSGDLG_TYPE_ERROR, MW("main_window")); return; } if (!hw) hlp_create_helpview (); pur_log_dbg ("Showing help, node %d", node); hlp_select_menuitem (node); gtk_widget_show (hw->win); } pureadmin-0.4/src/dirbrowser.c0000644000175000017500000005237610667602721013423 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Dirbrowser-widget (similar to the file-selector distributet with GTK+). This is * in fact a stand-alone widget that easily can be used in other projects. Please give * me credit for it and leave the copyright-notice is untouched. Thx! * * Simply add dirbrowser.c and .h to you project and use the functions declared in the .h-file * to access the widget! * * Copyright (C) 2003 Isak Savo */ /* FIXME: the text in the entry is the one that is used. We need a nicer handling! * Proposal: add a property, called 'directory' or similar a'la fileselector! */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "dirbrowser.h" /* These should not be included if used in other projects */ #include "globals.h" #include "helper.h" #ifndef MAXPATHLEN # ifdef PATH_MAX # define MAXPATHLEN PATH_MAX # else # define MAXPATHLEN 2048 # endif /* PATH:MAX */ #endif /* MAXPATHLEN */ static GtkWindowClass *parent_class = NULL; /* Internal functions */ gboolean dirbrowser_select (Dirbrowser *dbr, const gchar *directory); /*gboolean dirbrowser_populate (Dirbrowser *dbr, const gchar *directory);*/ void dirbrowser_populate_full_dir (Dirbrowser *dbr, const char *directory); gint dirbrowser_populate_children (Dirbrowser *dbr, GtkTreeIter parent_iter, const char *directory); static void dirbrowser_class_init (DirbrowserClass *klass); static void dirbrowser_init (Dirbrowser *dbr); static void dirbrowser_finalize (GObject *object); static void dirbrowser_destroy (GtkObject *object); static void dirbrowser_map (GtkWidget *widget); void dirbrowser_cursor_changed (GtkTreeView *treeview, gpointer user_data); gboolean dirbrowser_btnpress_event (GtkTreeView *treeview, GdkEventButton *event, gpointer user_data); void dirbrowser_entry_changed (GtkEditable *entry, gpointer data); void dirbrowser_btnhome_clicked (GtkButton *btn, gpointer data); gchar **_dirbrowser_directory_split (const gchar *directory); gchar *_dirbrowser_treepath_to_fspath (const GtkTreePath *c_path, GtkTreeModel *model); GList *_dirbrowser_get_dircontents (const gchar *directory); static void dirbrowser_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void dirbrowser_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); enum { COL_IMAGE = 0, COL_NAME, COL_FSNAME, N_DIR_COLUMNS }; enum { PROP_0, PROP_DIRECTORY }; static gboolean grab_default (GtkWidget *widget) { gtk_widget_grab_default (widget); return FALSE; } GType dirbrowser_get_type (void) { static GType dirbrowser_type = 0; if (!dirbrowser_type) { static const GTypeInfo dirbrowser_info = { sizeof (DirbrowserClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) dirbrowser_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (Dirbrowser), 0, /* n_preallocs */ (GInstanceInitFunc) dirbrowser_init, }; dirbrowser_type = g_type_register_static (GTK_TYPE_DIALOG, "Dirbrowser", &dirbrowser_info, 0); } return dirbrowser_type; } static void dirbrowser_class_init (DirbrowserClass *klass) { GObjectClass *gobject_class; GtkObjectClass *object_class; GtkWidgetClass *widget_class; gobject_class = (GObjectClass*) klass; object_class = (GtkObjectClass*) klass; widget_class = (GtkWidgetClass*) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = dirbrowser_finalize; object_class->destroy = dirbrowser_destroy; widget_class->map = dirbrowser_map; gobject_class->set_property = dirbrowser_set_property; gobject_class->get_property = dirbrowser_get_property; g_object_class_install_property (gobject_class, PROP_DIRECTORY, g_param_spec_string ("directory", N_("Directory"), N_("The currently selected directory"), NULL, G_PARAM_READABLE | G_PARAM_WRITABLE)); } static void dirbrowser_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { Dirbrowser *db; db = DIRBROWSER (object); switch (prop_id) { case PROP_DIRECTORY: dirbrowser_set_directory (db, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void dirbrowser_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { Dirbrowser *db; db = DIRBROWSER (object); switch (prop_id) { case PROP_DIRECTORY: g_value_set_string (value, dirbrowser_get_directory (db)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void dirbrowser_init (Dirbrowser *dbr) { GtkDialog *dlg; GtkTreeStore *store; GtkTreeViewColumn *column; GtkTreeIter iter; GtkCellRenderer *renderer_img, *renderer_txt; GtkWidget *vbox; dlg = GTK_DIALOG (dbr); gtk_widget_set_size_request (GTK_WIDGET (dlg), 250, 350); gtk_container_set_border_width (GTK_CONTAINER (dlg), 6); gtk_window_set_title (GTK_WINDOW (dlg), _("Select directory")); gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE); vbox = GTK_DIALOG (dlg)->vbox; gtk_widget_show (vbox); dbr->main_vbox = gtk_vbox_new (FALSE, 6); gtk_widget_show (dbr->main_vbox); gtk_box_pack_start (GTK_BOX (vbox), dbr->main_vbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (dbr->main_vbox), 6); dbr->btnbox = gtk_hbutton_box_new (); gtk_widget_show (dbr->btnbox); gtk_box_pack_start (GTK_BOX (dbr->main_vbox), dbr->btnbox, FALSE, FALSE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (dbr->btnbox), GTK_BUTTONBOX_START); dbr->btn_home = gtk_button_new_from_stock ("gtk-home"); gtk_widget_show (dbr->btn_home); gtk_container_add (GTK_CONTAINER (dbr->btnbox), dbr->btn_home); GTK_WIDGET_SET_FLAGS (dbr->btn_home, GTK_CAN_DEFAULT); gtk_button_set_relief (GTK_BUTTON (dbr->btn_home), GTK_RELIEF_HALF); dbr->location = gtk_entry_new (); gtk_widget_show (dbr->location); gtk_box_pack_start (GTK_BOX (dbr->main_vbox), dbr->location, FALSE, FALSE, 0); dbr->scr_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (dbr->scr_win); gtk_box_pack_start (GTK_BOX (dbr->main_vbox), dbr->scr_win, TRUE, TRUE, 0); dbr->dir_tree = gtk_tree_view_new (); gtk_widget_show (dbr->dir_tree); gtk_container_add (GTK_CONTAINER (dbr->scr_win), dbr->dir_tree); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dbr->dir_tree), TRUE); gtk_widget_show (dlg->action_area); gtk_button_box_set_layout (GTK_BUTTON_BOX (dlg->action_area), GTK_BUTTONBOX_END); dbr->btn_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (dbr->btn_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (dlg), dbr->btn_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (dbr->btn_cancel, GTK_CAN_DEFAULT); dbr->btn_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (dbr->btn_ok); gtk_dialog_add_action_widget (GTK_DIALOG (dlg), dbr->btn_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (dbr->btn_ok, GTK_CAN_DEFAULT); /* Initiate the treeview */ gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (dbr->dir_tree)), GTK_SELECTION_SINGLE); store = gtk_tree_store_new (N_DIR_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (dbr->dir_tree), GTK_TREE_MODEL (store)); g_object_unref (G_OBJECT (store)); column = gtk_tree_view_column_new (); renderer_img = gtk_cell_renderer_pixbuf_new (); renderer_txt = gtk_cell_renderer_text_new (); /* Only create a view for the first two columns (icon and utf8 name), the * last column is the *real* fsname, as got from g_dir_read_name() */ gtk_tree_view_column_pack_start (column, renderer_img, FALSE); gtk_tree_view_column_add_attribute (column, renderer_img, "pixbuf", COL_IMAGE); gtk_tree_view_column_pack_end (column, renderer_txt, TRUE); gtk_tree_view_column_add_attribute (column, renderer_txt, "text", COL_NAME); gtk_tree_view_insert_column (GTK_TREE_VIEW (dbr->dir_tree), column, -1); /* Directory-icon -- Rendered using the current theme */ dbr->icon = gtk_widget_render_icon (GTK_WIDGET (dbr), GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU, NULL); /* Add root-directory w/ children */ gtk_tree_store_append (GTK_TREE_STORE (store), &iter, NULL); gtk_tree_store_set (GTK_TREE_STORE (store), &iter, COL_IMAGE, dbr->icon, COL_NAME, "/", COL_FSNAME, "/", -1); dirbrowser_populate_children (dbr, iter, "/"); dbr->hid_cursor_changed = g_signal_connect ((gpointer) dbr->dir_tree, "cursor_changed", G_CALLBACK (dirbrowser_cursor_changed), (gpointer) dbr); g_signal_connect ((gpointer) dbr->dir_tree, "button_press_event", G_CALLBACK (dirbrowser_btnpress_event), (gpointer) dbr); dbr->hid_entry_changed = g_signal_connect ((gpointer) dbr->location, "changed", G_CALLBACK (dirbrowser_entry_changed), (gpointer) dbr); g_signal_connect_swapped (dbr->location, "focus_in_event", G_CALLBACK (grab_default), dbr->btn_ok); g_signal_connect_swapped (dbr->location, "activate", G_CALLBACK (gtk_button_clicked), dbr->btn_ok); g_signal_connect ((gpointer) dbr->btn_home, "clicked", G_CALLBACK (dirbrowser_btnhome_clicked), (gpointer) dbr); gtk_widget_grab_focus (dbr->location); } /* FIXME: Are these needed?? */ static void dirbrowser_finalize (GObject *object) { G_OBJECT_CLASS (parent_class)->finalize (object); } static void dirbrowser_destroy (GtkObject *object) { GTK_OBJECT_CLASS (parent_class)->destroy (object); } static void dirbrowser_map (GtkWidget *widget) { GTK_WIDGET_CLASS (parent_class)->map (widget); } void dirbrowser_set_directory (Dirbrowser *dir_browser, const char *directory) { gchar *directory_utf8; g_return_if_fail (IS_DIRBROWSER (dir_browser)); g_return_if_fail (directory != NULL); g_return_if_fail (g_file_test (directory, G_FILE_TEST_IS_DIR)); directory_utf8 = g_filename_to_utf8 (directory, -1, NULL, NULL, NULL); g_return_if_fail (directory_utf8 != NULL); if (dir_browser->location) gtk_entry_set_text (GTK_ENTRY (dir_browser->location), directory_utf8); g_object_notify (G_OBJECT (dir_browser), "directory"); g_free (directory_utf8); } /** * dirbrowser_get_directory: * @dir_browser: a #Dirbrowser * * This functions returns the current selected directory in the current * on-disk encoding. (see g_filename_from_utf8() in gtk-docs). * The returned string points to a statically allocated buffer and * should be copied if you plan to keep it around. * * If no directory is selected, the empty string, "", is returned. * * Return value: currently selected directory in the on-disk encoding. **/ G_CONST_RETURN gchar *dirbrowser_get_directory (Dirbrowser *dir_browser) { static const gchar nothing[2] = ""; static gchar something[MAXPATHLEN+2]; const gchar *utf8_name; gchar *sys_name; g_return_val_if_fail (IS_DIRBROWSER (dir_browser), nothing); if (dir_browser->location) { utf8_name = gtk_entry_get_text (GTK_ENTRY (dir_browser->location)); sys_name = g_filename_from_utf8 (utf8_name, -1, NULL, NULL, NULL); if (!sys_name) return nothing; strncpy (something, sys_name, sizeof (something)); g_free (sys_name); return something; } return nothing; } GtkWidget *dirbrowser_new (const gchar *title) { Dirbrowser *dbr; dbr = g_object_new (DIRBROWSER_TYPE, NULL); if (title) gtk_window_set_title (GTK_WINDOW (dbr), title); return GTK_WIDGET (dbr); } void dirbrowser_entry_changed (GtkEditable *entry, gpointer user_data) { Dirbrowser *dbr; gchar *location; location = gtk_editable_get_chars (entry, 0, -1); dbr = DIRBROWSER (user_data); if (g_file_test (location, G_FILE_TEST_IS_DIR)) { dirbrowser_populate_full_dir (dbr, location); dirbrowser_select (dbr, location); } g_free (location); } void dirbrowser_cursor_changed (GtkTreeView *treeview, gpointer user_data) { Dirbrowser *dbr; GtkTreeIter iter; GtkTreeModel *store; GtkTreeSelection *sel; GtkTreePath *path; gchar *fs_path; gint i = 0; dbr = DIRBROWSER (user_data); g_return_if_fail (IS_DIRBROWSER (dbr)); store = gtk_tree_view_get_model (treeview); sel = gtk_tree_view_get_selection (treeview); g_return_if_fail (gtk_tree_selection_get_selected (sel, &store, &iter)); path = gtk_tree_model_get_path (store, &iter); fs_path = _dirbrowser_treepath_to_fspath (path, store); if (!gtk_tree_model_iter_n_children (store, &iter)) i = dirbrowser_populate_children (dbr, iter, fs_path); //gtk_tree_view_expand_row (treeview, path, FALSE); g_signal_handler_block ((gpointer) dbr->location, dbr->hid_entry_changed); gtk_entry_set_text (GTK_ENTRY (dbr->location), fs_path); g_signal_handler_unblock ((gpointer) dbr->location, dbr->hid_entry_changed); g_free (fs_path); } gboolean dirbrowser_btnpress_event (GtkTreeView *treeview, GdkEventButton *event, gpointer user_data) { Dirbrowser *dbr; GtkTreeSelection *sel; GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; dbr = DIRBROWSER (user_data); g_return_val_if_fail (IS_DIRBROWSER (dbr), FALSE); model = gtk_tree_view_get_model (treeview); sel = gtk_tree_view_get_selection (treeview); g_return_val_if_fail (gtk_tree_selection_get_selected (sel, &model, &iter), FALSE); if (event->type == GDK_2BUTTON_PRESS) { path = gtk_tree_model_get_path (model, &iter); if (gtk_tree_view_row_expanded (treeview, path)) gtk_tree_view_collapse_row (treeview, path); else gtk_tree_view_expand_row (treeview, path, FALSE); gtk_tree_path_free (path); } return FALSE; } void dirbrowser_btnhome_clicked (GtkButton *btn, gpointer data) { Dirbrowser *dbr; dbr = DIRBROWSER (data); g_return_if_fail (IS_DIRBROWSER (dbr)); gtk_entry_set_text (GTK_ENTRY (dbr->location), g_get_home_dir ()); } /* This function is taken directly from the GTK+-2.6.9 sources to maintain compatibility with * GTK 2.0.x */ static void pureadmin_gtk_tree_view_expand_to_path (GtkTreeView *tree_view, GtkTreePath *path) { gint i, depth; gint *indices; GtkTreePath *tmp; g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); g_return_if_fail (path != NULL); depth = gtk_tree_path_get_depth (path); indices = gtk_tree_path_get_indices (path); tmp = gtk_tree_path_new (); g_return_if_fail (tmp != NULL); for (i = 0; i < depth; i++) { gtk_tree_path_append_index (tmp, indices[i]); gtk_tree_view_expand_row (tree_view, tmp, FALSE); } gtk_tree_path_free (tmp); } gboolean dirbrowser_select (Dirbrowser *dbr, const gchar *directory) { GtkTreeModel *model; GtkTreeIter iter, child_iter; GtkTreePath *path; GtkTreeSelection *sel; gchar **dir_v, *tmp; gint i = 0; gboolean found = FALSE; g_return_val_if_fail (IS_DIRBROWSER (dbr), FALSE); g_return_val_if_fail (g_path_is_absolute (directory), FALSE); model = gtk_tree_view_get_model (GTK_TREE_VIEW (dbr->dir_tree)); gtk_tree_model_get_iter_first (model, &iter); dir_v = _dirbrowser_directory_split (directory); while (dir_v[i]/* && gtk_tree_store_iter_is_valid (GTK_TREE_STORE (model), &iter) */) { found = FALSE; gtk_tree_model_get (model, &iter, COL_FSNAME, &tmp, -1); if (strcmp (dir_v[i], tmp) == 0) { /* MATCH */ found = TRUE; if (gtk_tree_model_iter_children (model, &child_iter, &iter)) { if (dir_v[i+1]) memcpy (&iter, &child_iter, sizeof (GtkTreeIter)); i++; } else { g_free (tmp); break; } } else gtk_tree_model_iter_next (model, &iter); g_free (tmp); } if (found) { sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (dbr->dir_tree)); path = gtk_tree_model_get_path (model, &iter); g_signal_handler_block ((gpointer) dbr->dir_tree, dbr->hid_cursor_changed); pureadmin_gtk_tree_view_expand_to_path (GTK_TREE_VIEW (dbr->dir_tree), path); gtk_tree_view_expand_row (GTK_TREE_VIEW (dbr->dir_tree), path, FALSE); gtk_tree_selection_select_path (sel, path); while (g_main_context_pending (NULL)) g_main_context_iteration (NULL, FALSE); gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (dbr->dir_tree), path, NULL, TRUE, 0.3, 0); g_signal_handler_unblock ((gpointer) dbr->dir_tree, dbr->hid_cursor_changed); gtk_tree_path_free (path); } return TRUE; } void dirbrowser_populate_full_dir (Dirbrowser *dbr, const char *directory) { GtkTreeModel *model; GtkTreeIter iter, child_iter; gchar **dir_v, *tmp; GString *cur_dir; gint i = 0, count; g_return_if_fail (IS_DIRBROWSER (dbr)); g_return_if_fail (g_path_is_absolute (directory)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (dbr->dir_tree)); gtk_tree_model_get_iter_first (model, &iter); cur_dir = g_string_new (""); dir_v = _dirbrowser_directory_split (directory); while (dir_v[i]) { gtk_tree_model_get (model, &iter, COL_FSNAME, &tmp, -1); if (strcmp (dir_v[i], tmp) == 0) { cur_dir = g_string_append (cur_dir, dir_v[i]); if (!gtk_tree_model_iter_n_children (model, &iter)) { count = dirbrowser_populate_children (dbr, iter, cur_dir->str); if (count < 1) break; } gtk_tree_model_iter_children (model, &child_iter, &iter); memcpy (&iter, &child_iter, sizeof (GtkTreeIter)); if (*dir_v[i] != '/') cur_dir = g_string_append_c (cur_dir, '/'); i++; } else gtk_tree_model_iter_next (model, &iter); } g_strfreev (dir_v); g_string_free (cur_dir, TRUE); } gint dirbrowser_populate_children (Dirbrowser *dbr, GtkTreeIter parent_iter, const gchar *directory) { GtkTreeModel *model; GtkTreeIter child_iter; gchar *utf8_entry, *entry; GList *dirlist, *node; gint count = 0; g_return_val_if_fail (IS_DIRBROWSER (dbr), 0); model = gtk_tree_view_get_model (GTK_TREE_VIEW (dbr->dir_tree)); g_return_val_if_fail (g_path_is_absolute (directory) || model != NULL , 0); node = dirlist = _dirbrowser_get_dircontents (directory); g_return_val_if_fail (dirlist != NULL, 0); do { entry = (gchar *) node->data; utf8_entry = g_filename_to_utf8 (entry, -1, NULL, NULL, NULL); if (utf8_entry && g_utf8_validate (utf8_entry, -1, NULL)) { count++; gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &parent_iter); gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter, COL_IMAGE, dbr->icon, COL_NAME, utf8_entry, COL_FSNAME, entry, -1); } else g_warning ("%s: Invalid entry: %s\n", __FUNCTION__, entry); g_free (utf8_entry); g_free (node->data); } while ((node = g_list_next(node))); g_list_free (dirlist); return count; } /* Returns the contents of a directory in a sorted GList */ GList *_dirbrowser_get_dircontents (const gchar *directory) { const gchar *entry; gchar *full_path; GDir *dir; GList *retval = NULL; dir = g_dir_open (directory, 0, NULL); g_return_val_if_fail (dir != NULL, NULL); while ((entry = g_dir_read_name (dir))) { full_path = g_strdup_printf ("%s/%s",directory, entry); /* FIXME: strcasecmp needs to be replaced here! */ if (g_file_test (full_path, G_FILE_TEST_IS_DIR) && *entry != '.') retval = g_list_insert_sorted (retval, g_strdup (entry), (GCompareFunc) g_strcasecmp); g_free (full_path); } g_dir_close (dir); return g_list_first (retval); } gchar **_dirbrowser_directory_split (const gchar *directory) { gchar **ret; gchar **tmp_v; gint i = 0, j = 0; tmp_v = g_strsplit (directory, "/", 0); if (!tmp_v) return g_strsplit ("", "/", 0); while (tmp_v[i++]) ; /* Check how many parts we have.. */ ret = g_new0 (gchar *, i); /* Was: (gchar **) g_malloc0 (i * sizeof (gchar *)); */ i = -1; ret[j++] = g_strdup ("/"); while (tmp_v[++i]) { if (*tmp_v[i] == '\0') continue; ret[j++] = g_strdup (tmp_v[i]); } g_strfreev (tmp_v); return ret; } gchar *_dirbrowser_treepath_to_fspath (const GtkTreePath *c_path, GtkTreeModel *model) { GString *fs_path; GtkTreeIter iter; GtkTreePath *path; gchar *ret, *entry; path = gtk_tree_path_copy (c_path); if (gtk_tree_path_get_depth (path) == 1) return g_strdup ("/"); fs_path = g_string_new (""); while (gtk_tree_path_get_depth (path) > 1) { gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, COL_FSNAME, &entry, -1); g_string_prepend (fs_path, entry); if (*entry != '/') g_string_prepend_c (fs_path, '/'); gtk_tree_path_up (path); } ret = fs_path->str; g_string_free (fs_path, FALSE); gtk_tree_path_free (path); return ret; } pureadmin-0.4/src/prereq_usrmanager.h0000644000175000017500000000150610667602721014755 00000000000000#ifndef __PREREQ_USRMANAGER_H__ #define __PREREQ_USRMANAGER_H__ #include /* FIXME: Perhaps these don't need to be public */ typedef enum { CHANGES_ADD_USER = 1 << 0, CHANGES_ADD_GROUP = 1 << 1, CHANGES_CREATE_HOMEDIR = 1 << 2, CHANGES_CREATE_PWFILE = 1 << 3 } SystemChangesType; typedef struct { SystemChangesType changes; gchar *ftpuser, *ftpgroup; gchar *ftpdir; gchar *pwfile; guint usr_id, grp_id; } SystemActions; /* Shows the prereq window and returns TRUE if all neccessary changes was completed */ gboolean prereq_show_dialog (GtkWindow *parent); /* Gets a value indicating whether all the prerequisities for running the user manager * is fulfilled */ gboolean prereq_are_all_requirements_met (void); /* Free's a SystemActions struct */ void system_actions_free (SystemActions *actions); #endif pureadmin-0.4/src/helper.h0000644000175000017500000000460710667602721012517 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Misc helperfunctions used throughout the program * * Copyright (C) 2003-2006 Isak Savo */ #ifndef __HELPER_H__ #define __HELPER_H__ #include gint arr_count (gchar **arr); gboolean misc_str_is_only_whitespace (const gchar *s1); gchar **create_array (gint *argc_out, ...); gchar *misc_spawn_command (const gchar *cmdline); gchar *misc_get_process_info (const gchar *pid, const gchar *file); gchar *string_to_utf8 (const gchar *str); gchar *string_to_vuser_locale (const char *str); gchar *string_from_vuser_locale (const char *str); gchar *filename_without_extension (const gchar *filename); gboolean misc_str_isearch (const gchar *haystack, const gchar *needle); gchar *pur_elipzise (const gchar *orig_s, guint len); gboolean misc_stop_server (GError **err); gboolean misc_start_server (GError **err); gint misc_close_connection (guint pid); gint misc_get_pureftpd_pid (void); gchar *misc_find_file_in_dirs (const gchar *filename, const gchar *dirs); gchar *misc_find_prog_in_dirs (const gchar *filename, const gchar *dirs); gchar *misc_get_line_beginning_with (const gchar *filename, const gchar *needle); gchar *misc_find_webbrowser (void); gboolean misc_create_passwd_file (const gchar *filename); gboolean misc_create_directory (const gchar *directory, gint uid, gint gid, GError **err); gchar *misc_crypt_passwd (const gchar * const pwd); #define MISC_VALID_STRING(s) ((s != NULL && *(s) != 0)) #define PUREADMIN_MAIN_ERROR g_quark_from_static_string ("PUREADMIN_MAIN") typedef enum { PA_MAIN_ERROR_COMMAND_NOT_FOUND, PA_MAIN_ERROR_PERMISSION_DENIED, PA_MAIN_ERROR_FAILED } PureadminMainError; #endif /* __HELPER_H__ */ pureadmin-0.4/src/gui_helper.h0000644000175000017500000000677710667602721013375 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Misc helperfunctions related to the GUI * * Copyright (C) 2003 Isak Savo */ #ifndef __GUI_HELPER_H__ #define __GUI_HELPER_H__ #include #include #include "eggstatusicon.h" #include "srv_comm.h" #define GB 1073741824 #define MB 1048576 #define KB 1024 #define MSGDLG_TYPE_INFO GTK_STOCK_DIALOG_INFO #define MSGDLG_TYPE_WARNING GTK_STOCK_DIALOG_WARNING #define MSGDLG_TYPE_ERROR GTK_STOCK_DIALOG_ERROR extern GladeXML *mwin_xml; extern GladeXML *usrm_xml; extern GladeXML *pref_xml; extern GladeXML *dlgs_xml; extern EggStatusIcon *status_icon; extern gboolean prog_exiting; #define MW(name) glade_xml_get_widget (mwin_xml, name) #define PW(name) glade_xml_get_widget (pref_xml, name) #define UW(name) glade_xml_get_widget (usrm_xml, name) #define DW(name) glade_xml_get_widget (dlgs_xml, name) typedef struct { GdkPixbuf *icon; gchar *text; gint32 id; } PGuiActivityRow; typedef struct { GdkPixbuf *icon; gchar *user, *host; gint num_connections; } PGuiUserRow; enum { COL_ACT_ICON, COL_ACT_TEXT, COL_ACT_ID, N_ACT_COLUMNS }; enum { COL_USR_ICON, COL_USR_USER, COL_USR_HOST, COL_USR_NUM_CONNECTIONS, N_USR_COLUMNS }; typedef enum { POPUP_FROM_USRTREE, POPUP_FROM_ACTTREE } popup_src_t; void gui_terminate (void); void show_status_icon (const gchar *tooltip); void hide_status_icon (void); void send_notification (const gchar *summary, const gchar *body); void statusbar_push (const gchar *msg); void statusbar_pop (void); void gui_select_treeview_row (GtkTreeIter *iter, GtkTreeView *tree); void gui_update_server_status (void); void gui_update_menu_sensivity (void); void gui_display_activity_popup (popup_src_t source); void gui_add_to_activities (PGuiActivityRow line); void gui_add_to_online_users (PGuiUserRow line); void gui_clear_activity_list (void); void gui_clear_users_list (void); void gui_update_info_frame (PActivity *a); //GtkWidget *gui_create_menu_from_glist (GList *l); GtkWidget *gui_create_system_account_menu (GList *l); void gui_display_msgdialog_checkbox (const gchar *primary, const gchar *secondary, const gchar *icon_type, GtkWidget *parent, gboolean *show_again); void gui_display_msgdialog (const gchar *primary, const gchar *secondary, const gchar *icon_type, GtkWidget *parent); gint gui_display_confirmdialog (const gchar *primary, const gchar *secondary, const gchar *txt_btn_yes, const gchar *txt_btn_no, GtkWidget *parent); /* FIXME: These should go! */ /* Use this function to set the directory containing installed pixmaps. */ void set_pixmap_directory (const gchar *directory); /* This is used to create the pixbufs used in the interface. */ GdkPixbuf *create_pixbuf (const gchar *filename); void show_not_yet_implemented (GtkWindow *parent); #endif /* __GUI_HELPER_H__ */ pureadmin-0.4/src/debugging.h0000644000175000017500000000232410667602721013165 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Debugging functions * * Copyright (C) 2003-2004 Isak Savo */ #ifndef __DEBUGGING_H__ #define __DEBUGGING_H__ typedef enum { DBG_INFO, DBG_WARNING, DBG_ERROR, DBG_DEBUG, NUM_DBGTAGS } dbg_tags_t; gboolean init_dbg_console (void); void pur_debug_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data); void dbg_present_dbg_console (void); #endif /* __DEBUGGING_H__ */ pureadmin-0.4/src/eggtrayicon.h0000644000175000017500000000473710667602721013557 00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* eggtrayicon.h * Copyright (C) 2002 Anders Carlsson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __EGG_TRAY_ICON_H__ #define __EGG_TRAY_ICON_H__ #include #include G_BEGIN_DECLS #define EGG_TYPE_TRAY_ICON (egg_tray_icon_get_type ()) #define EGG_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TRAY_ICON, EggTrayIcon)) #define EGG_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TRAY_ICON, EggTrayIconClass)) #define EGG_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TRAY_ICON)) #define EGG_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON)) #define EGG_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass)) typedef struct _EggTrayIcon EggTrayIcon; typedef struct _EggTrayIconClass EggTrayIconClass; struct _EggTrayIcon { GtkPlug parent_instance; guint stamp; Atom selection_atom; Atom manager_atom; Atom system_tray_opcode_atom; Atom orientation_atom; Window manager_window; GtkOrientation orientation; }; struct _EggTrayIconClass { GtkPlugClass parent_class; }; GType egg_tray_icon_get_type (void); EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen, const gchar *name); EggTrayIcon *egg_tray_icon_new (const gchar *name); guint egg_tray_icon_send_message (EggTrayIcon *icon, gint timeout, const char *message, gint len); void egg_tray_icon_cancel_message (EggTrayIcon *icon, guint id); GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon); G_END_DECLS #endif /* __EGG_TRAY_ICON_H__ */ pureadmin-0.4/src/purepw.c0000644000175000017500000004222410667602721012552 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Purepw (password and db) functions * * Copyright (C) 2003 Isak Savo */ /* All functions take strings in UTF-8 format and handles encoding conversion before * writing to disk. * All strings returned are valid UTF-8 */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "cfg.h" #include "globals.h" #include "helper.h" #include "usr_manager.h" #include "purepw.h" /* Rebuilds the puredb by calling "pure-pw mkdb" on the password file */ static gboolean rebuild_puredb (GError **err) { gchar *fullpath, *cmd; gboolean ret; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if ((fullpath = g_find_program_in_path (cfg.cmd_purepw)) == NULL) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_COMMAND_NOT_FOUND, "The command %s could not be found", cfg.cmd_purepw); g_free (fullpath); return FALSE; } cmd = g_strdup_printf ("%s mkdb %s -f %s", fullpath, cfg.pdbfile, cfg.pwfile); ret = g_spawn_command_line_async (cmd, err); g_free (fullpath); g_free (cmd); return ret; } /* pw_add_line: Adds or modifies a password entry in the plain-text password-file used by pure-pw. * If 'user' already exists, do an update; otherwise add a new line. * Args: * line: The already formatted line to add. * user: The username in vuser locale * Returns: * FALSE - Couldn't add line. See err for details! * TRUE - Everything updated successfully. */ static gboolean pw_add_line (const gchar *line, const gchar *user, GError **err) { FILE *fl, *fl_tmp; gint fd_tmp; gchar *tmp_fname, buf[LINE_MAX], *dir; gboolean added = FALSE, pwfile_exists = TRUE; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); dir = g_path_get_dirname (cfg.pwfile); tmp_fname = g_strdup_printf ("%s/pureadmin_XXXXXX", dir); if ((fl = fopen (cfg.pwfile, "r")) == NULL) { pur_log_wrn ("Unable to open password file: %s", strerror(errno)); if (g_file_test (cfg.pwfile, G_FILE_TEST_EXISTS)) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Couldn't create temporary password file %s", tmp_fname); g_free(tmp_fname); return FALSE; } else /* The file doesn't exist, but a new line could be added anyway */ pwfile_exists = FALSE; } fd_tmp = g_mkstemp (tmp_fname); if (fd_tmp == -1) { /* Not likely to happen, but lets check for it anyway! */ g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Couldn't create temporary file [%s]", tmp_fname); g_free(tmp_fname); return FALSE; } if (((fl_tmp = fdopen (fd_tmp, "w")) == NULL)) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Couldn't open temporary file: %s", strerror (errno)); close (fd_tmp); g_free(tmp_fname); return FALSE; } while (pwfile_exists && fgets (buf, LINE_MAX, fl)) { if (strncmp (buf, user, strlen (user)) == 0) { fputs (line, fl_tmp); fputc ('\n', fl_tmp); added = TRUE; } else fputs (buf, fl_tmp); } if (!added) { fputs (line, fl_tmp); fputc ('\n', fl_tmp); } fclose (fl_tmp); if (pwfile_exists) { fclose (fl); if (remove (cfg.pwfile) != 0) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Unable to remove password-file"); g_free(tmp_fname); return FALSE; } } if (rename (tmp_fname, cfg.pwfile) != 0) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Unable to rename [%s] to [%s]: %s", tmp_fname, cfg.pwfile, strerror (errno)); g_free(tmp_fname); return FALSE; } g_free(tmp_fname); return TRUE; } static gboolean pw_remove_line (const gchar *user, gchar **line, GError **err) { FILE *fl, *fl_tmp; gint fd_tmp; guint len; gchar *tmp_fname, buf[LINE_MAX]; gboolean removed = FALSE; gchar *dir, *sep_pos, *buf_start; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if ((fl = fopen (cfg.pwfile, "r")) == NULL) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_FILE_NOT_FOUND, "Unable to open password file"); return FALSE; } dir = g_path_get_dirname (cfg.pwfile); tmp_fname = g_strdup_printf ("%s/pureadmin_XXXXXX", dir); g_free (dir); fd_tmp = g_mkstemp (tmp_fname); if ((fl_tmp = fdopen (fd_tmp, "w")) == NULL) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Unable to open temporary password-file"); g_free (tmp_fname); return FALSE; } buf_start = buf; while (fgets (buf, LINE_MAX, fl)) { if ((sep_pos = strchr (buf, PW_LINE_SEP_CH)) == NULL) /* No ':' found in string */ continue; len = GPOINTER_TO_INT(sep_pos) - GPOINTER_TO_INT(buf_start); if (strlen (user) == len && strncmp (user, buf, len) == 0) { removed = TRUE; *line = strdup (buf); } else fputs (buf, fl_tmp); } fclose (fl_tmp); fclose (fl); if (removed == FALSE) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_USER_NOT_FOUND, "The user %s does not exist", user); remove (tmp_fname); g_free (tmp_fname); return FALSE; } if (remove (cfg.pwfile) != 0) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Unable to remove password-file [%s]: %s ", cfg.pwfile, strerror (errno)); g_free (tmp_fname); return FALSE; } if (rename (tmp_fname, cfg.pwfile) != 0) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Unable to rename [%s] to [%s]: %s", tmp_fname, cfg.pwfile, strerror (errno)); g_free (tmp_fname); return FALSE; } g_free (tmp_fname); return TRUE; } /* pw_parse_line: Parses a line read from a pure-ftpd password file. * Args: line the line to parse. * pwinfo: preallocated struct where the info will be stored. (UTF-8) * user: if not NULL, then return failure if users doesn't match. * * Returns: TRUE upon success, otherwise FALSE */ static gboolean pw_parse_line(gchar *line, PWInfo * const pwinfo, const gchar *user) { gchar **arr; memset (pwinfo, 0, sizeof (PWInfo)); arr = g_strsplit (line, PW_LINE_SEP, 0); if (arr_count(arr) < 17) return FALSE; pwinfo->login = string_from_vuser_locale (arr[0]); if (user && !g_str_equal (user, arr[0])) { g_strfreev (arr); return FALSE; } pwinfo->pwd = g_strdup (arr[1]); pwinfo->uid = (uid_t) strtoul(arr[2], NULL, 10); pwinfo->gid = (gid_t) strtoul(arr[3], NULL, 10); if (pwinfo->uid <= (uid_t) 0 || pwinfo->gid <= (gid_t) 0) { g_strfreev (arr); return FALSE; } pwinfo->gecos = string_to_utf8 (arr[4]); if (*(arr[5]) != '/') { g_strfreev (arr); return FALSE; } pwinfo->home = g_filename_to_utf8 (arr[5], -1, NULL, NULL, NULL); if (*(arr[6])) { pwinfo->bw_ul = strtoul(arr[6], NULL, 10) / 1024UL; } if (*(arr[7])) { pwinfo->bw_dl = strtoul(arr[7], NULL, 10) / 1024UL; } if (*(arr[8])) { pwinfo->ul_ratio = (unsigned int) strtoul(arr[8], NULL, 10); } if (*(arr[9])) { pwinfo->dl_ratio = (unsigned int) strtoul(arr[9], NULL, 10); } if (*(arr[10])) { pwinfo->per_user_max = (guint) strtoul(arr[10], NULL, 10);; } if (*(arr[11])) { pwinfo->quota_files = strtoul(arr[11], NULL, 10); } if (*(arr[12])) { pwinfo->quota_size = strtoull(arr[12], NULL, 10) / (1024ULL * 1024ULL); } pwinfo->allow_local_ip = g_strdup (arr[13]); pwinfo->deny_local_ip = g_strdup (arr[14]); pwinfo->allow_client_ip = g_strdup (arr[15]); pwinfo->deny_client_ip = g_strdup (arr[16]); if (sscanf(arr[17], "%u-%u", &pwinfo->time_begin, &pwinfo->time_end) == 2 && pwinfo->time_begin < 2360 && (pwinfo->time_begin % 100) < 60 && pwinfo->time_end < 2360 && (pwinfo->time_end % 100) < 60) { /* nothing */ } else { pwinfo->time_begin = 0; pwinfo->time_end = 0; } g_strfreev (arr); return TRUE; } /*** Global functions ***/ /* pw_add_user: Adds a user to the database. * * Arguments: user The username to add (UTF8) * passwd The password (UTF8) * * Returns: TRUE if the user was added * FALSE upon failure. Check 'err' for details */ gboolean pw_add_user (const gchar *user, const gchar *passwd, GError **err) { GString *line; gint ret; gchar *conv; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); conv = string_to_vuser_locale (user); line = g_string_new (conv); g_free (conv); g_string_append_printf (line, ":%s:", passwd); g_string_append_printf (line, "%d:%d::", cfg.default_uid, cfg.default_gid); g_string_append_printf (line, "%s/./", cfg.default_home); /* Make chroot by default */ g_string_append (line, "::::::::::::"); ret = pw_add_line (line->str, user, err); g_string_free (line, TRUE); if (ret == FALSE) return FALSE; return rebuild_puredb (err); } /* FIXME: This can cause user lost in rare cases.. */ /* pw_remove_user: Removes a user from the database. * * Arguments: user The username to remove (UTF-8) * err The return location for errors, NULL to ignore * * Returns: TRUE if the user was removed completely * FALSE if something went wrong, see 'err' for details */ gboolean pw_remove_user (const gchar *user, GError **err) { gchar *line = NULL; GError *our_err = NULL; gchar *conv; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if (!user || *user == 0) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_FAILED, "Invalid username"); return FALSE; } conv = string_to_vuser_locale (user); if (!pw_remove_line (conv, &line, err)) { g_free (conv); return FALSE; } g_free (conv); if (!rebuild_puredb (&our_err)) { g_propagate_error (err, our_err); g_error_free (our_err); our_err = NULL; if (!pw_add_line (line, conv, &our_err)) { /* We're screwed! */ g_error_free (*err); *err = NULL; pur_log_err ("Couldn't re-add removed line[%s] to password file: %s", line, our_err->message); g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_FAILED, "User %s is lost :-(", user); return FALSE; } return FALSE; } g_free (line); return TRUE; } /* pw_user_exists: Checks if a user exists in the password file * * Arguments: user The username to check for * err The location where errors should be stored * Returns: TRUE if the user was found * FALSE if the user wasn't found or an error occurred (check *err) */ gboolean pw_user_exists (const gchar *user, GError **err) { gboolean found = FALSE; gchar *sep_pos, *buf, **arr, *conv; gint i; guint len; gsize bytes; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if (!user || strlen (user) < 1) { /* FIXME: This is a programming error and shouldn't use GError... */ g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_FAILED, "Invalid username"); return FALSE; } if (!g_file_get_contents (cfg.pwfile, &buf, &bytes, err)) return FALSE; conv = string_to_vuser_locale (user); arr = g_strsplit (buf, "\n", -1); g_free (buf); i = -1; while (arr[++i]) { buf = arr[i]; if ((sep_pos = strchr (arr[i], PW_LINE_SEP_CH)) == NULL) continue; len = gpointer_diff (sep_pos,buf); if (strlen (conv) == len && strncmp (conv, buf, len) == 0) { found = TRUE; break; } } g_strfreev (arr); g_free (conv); return found; } /* pw_get_available_users: Get a list of available users in the puredb * * Returns: a list of available users, all strings valid UTF-8 */ GList *pw_get_available_users (GError **err) { GList *retval = NULL; PAvailableUser *user; FILE *pw; gchar buf[200], **arr; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if ((pw = fopen (cfg.pwfile, "r")) == NULL) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Couldn't open %s: %s", cfg.pwfile, g_strerror (errno)); return NULL; } while (fgets (buf, 200, pw)) { g_strchomp (buf); arr = g_strsplit (buf, PW_LINE_SEP, -1); if (arr_count (arr) < 4) continue; user = g_new0 (PAvailableUser, 1); user->login = string_from_vuser_locale (arr[0]); user->realname = string_to_utf8 (arr[4]); retval = g_list_prepend (retval, user); g_strfreev (arr); } fclose (pw); return g_list_first (retval); } /* pw_get_user_information: Fetches information for the specified user. * * Arguments: user * Returns: A struct w/ all info or NULL upon failure and err is set appropiately */ PWInfo *pw_get_user_information (gchar *user, GError **err) { PWInfo *info; FILE *pw_fl; gchar *buf, *conv; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if ((pw_fl = fopen (cfg.pwfile, "r")) == NULL) { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_PERMISSION_DENIED, "Unable to open password file %s: %s", cfg.pwfile, g_strerror (errno)); return NULL; } buf = g_new0 (gchar, LINE_MAX); info = g_new0 (PWInfo, 1); conv = string_to_vuser_locale (user); while (fgets (buf, LINE_MAX, pw_fl)) { g_strstrip (buf); if (*buf == 0) continue; if (pw_parse_line (buf, info, conv)) { g_free (conv); return info; } } g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_USER_NOT_FOUND, "User %s not found", user); g_free (info); g_free (conv); return NULL; } /* pw_set_user_information: Sets the information for the user in i->login. * * Arguments: i The information, including username. In UTF-8 format * err Return location for error, or NULL to ignore errors. * * Returns: TRUE if user information was updated. * FALSE if something went wrong. Check err for details */ gboolean pw_set_user_information (PWInfo * const i, GError **err) { GString *line; gchar *tmp, *user_vlocale; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); user_vlocale = string_to_vuser_locale (i->login); line = g_string_new (user_vlocale); g_string_append_printf (line, ":%s:", i->pwd); /* UID and GID */ g_string_append_printf (line, "%d:%d:", i->uid, i->gid); /* Real name */ g_string_append_printf (line, "%s:", i->gecos ? i->gecos : ""); /* Home */ if (MISC_VALID_STRING (i->home)) { tmp = g_filename_from_utf8 (i->home, -1, NULL, NULL, NULL); g_string_append_printf (line, "%s:", tmp); g_free (tmp); } else { g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_INVALID_FIELD, "Home directory field invalid [%s]", i->home); g_string_free (line, TRUE); g_free (user_vlocale); return FALSE; } /* Bandwidth- and size-restrictions */ if (i->bw_ul) g_string_append_printf (line, "%li:", i->bw_ul * 1024UL); else g_string_append (line, ":"); if (i->bw_dl) g_string_append_printf (line, "%li:", i->bw_dl * 1024UL); else g_string_append (line, ":"); if (i->ul_ratio) g_string_append_printf (line, "%d:", i->ul_ratio); else g_string_append (line, ":"); if (i->dl_ratio) g_string_append_printf (line, "%d:", i->dl_ratio); else g_string_append (line, ":"); if (i->per_user_max) g_string_append_printf (line, "%d:", i->per_user_max); else g_string_append (line, ":"); if (i->quota_files) g_string_append_printf (line, "%d:", i->quota_files); else g_string_append (line, ":"); if (i->quota_size) g_string_append_printf (line, "%lld:", i->quota_size * 1024ULL * 1024ULL); else g_string_append (line, ":"); /* IP-restrictions */ if (MISC_VALID_STRING (i->allow_local_ip)) g_string_append_printf (line, "%s:", i->allow_local_ip); else g_string_append (line, ":"); if (MISC_VALID_STRING (i->deny_local_ip)) g_string_append_printf (line, "%s:", i->deny_local_ip); else g_string_append (line, ":"); if (MISC_VALID_STRING (i->allow_client_ip)) g_string_append_printf (line, "%s:", i->allow_client_ip); else g_string_append (line, ":"); if (MISC_VALID_STRING (i->deny_client_ip)) g_string_append_printf (line, "%s:", i->deny_client_ip); else g_string_append (line, ":"); if (i->time_begin == 0 && i->time_end == 0) { /* Nada */ } else if (i->time_begin < 2360 && (i->time_begin % 100) < 60 && i->time_end < 2360 && (i->time_end % 100) < 60) g_string_append_printf (line, "%04d-%04d", i->time_begin, i->time_end); if (!pw_add_line (line->str, user_vlocale, err)) { g_string_free (line, TRUE); g_free (user_vlocale); return FALSE; } g_string_free (line, TRUE); g_free (user_vlocale); return rebuild_puredb (err); } pureadmin-0.4/src/helper.c0000644000175000017500000003550210667602721012510 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Misc helperfunctions used throughout the program * * -- NOTE: * crypt() was taken and slightly modified from pureftpd: Copyright to the author(s) * -- */ #ifdef HAVE_CONFIG_H # include #endif #define _XOPEN_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include "helper.h" #include "usr_manager.h" #include "globals.h" #include "cfg.h" G_GNUC_PURE gint arr_count (gchar **arr) { gint i = 0; g_return_val_if_fail (arr, 0); while (arr[i] != NULL) i++; return i; } G_GNUC_PURE gboolean misc_str_is_only_whitespace (const gchar *s1) { guint i; for (i = 0; i < strlen (s1); i++) if (!isspace (s1[i])) return FALSE; return TRUE; } /* create_array: Creates a null terminated array of strings containing all arguments passed * to this function. The argument list MUST be null-terminated. * * Arguments: * argc_out: If non-null, the number of items in the array will be stored here. * ...: A null-terminated list of strings to add to the array. * * Example: gchar **myarr = create_array (NULL, "item1", "item2", "item3", NULL); */ gchar **create_array (gint *argc_out, ...) { va_list ap; GPtrArray *arr; gchar *cur; arr = g_ptr_array_sized_new (20); va_start (ap, argc_out); while ((cur = va_arg(ap, gchar*))) { g_ptr_array_add (arr, g_strdup (cur)); } g_ptr_array_add (arr, NULL); va_end (ap); if (argc_out) *argc_out = arr->len; return (gchar **) g_ptr_array_free (arr, FALSE); } /* Spawns a command and return its output (only from stdout) as a newly allocated * string. */ gchar *misc_spawn_command (const gchar *cmdline) { gchar *rv = NULL; gboolean success = g_spawn_command_line_sync (cmdline, &rv, NULL, NULL, NULL); if (!success) return NULL; return rv; } /* Gets the contents of /proc//file as a newly allocated string. */ gchar *misc_get_process_info (const gchar *pid, const gchar *file) { gchar *path = g_build_filename ("/proc", pid, file, NULL); gchar *rv = NULL; g_file_get_contents (path, &rv, NULL, NULL); return rv; } /* string_to_utf8: This function will do its best trying to convert the * input string to UTF-8. It will convert as many bytes as * possible, appending partial conversion with the * string 'Invalid Unicode' * If 'str' is null, the empty string ("") is returned! * * Returns: the (partially) converted string. This must always be free'd */ gchar *string_to_utf8 (const gchar *str) { gchar *retval, *tmp; GError *err = NULL; gsize bytes_read, bytes_written; gboolean ends_with_newline = FALSE; gint valid_utf8bytes = 0; #define INVALID_UNICODE_STRING g_strconcat (_("Invalid Unicode"), (ends_with_newline ? "\n" : ""), NULL) g_return_val_if_fail (str, g_strdup("")); if (str[strlen (str) - 1] == '\n') ends_with_newline = TRUE; if (g_utf8_validate (str, -1, (const gchar**) &tmp)) return g_strdup (str); valid_utf8bytes = gpointer_diff(tmp,str) - 1; retval = g_locale_to_utf8 (str, -1, &bytes_read, &bytes_written, &err); if (err) { g_free (retval); g_error_free (err); err = NULL; if (bytes_read > 0) valid_utf8bytes = bytes_read; tmp = g_locale_to_utf8 (str, valid_utf8bytes, NULL, NULL, &err); if (G_UNLIKELY(err)) { /* This should not even happen */ pur_log_wrn ("Couldn't even convert %d first bytes to UTF-8: %s", valid_utf8bytes, err->message); g_error_free (err); return INVALID_UNICODE_STRING; } /* Failed character encoding conversion, return partial string */ retval = g_strdup_printf ("%s (%s)%c", tmp, _("Invalid Unicode"), ends_with_newline ? '\n' : '\0'); g_free (tmp); } return retval; } /* string_to vuser_locale: Converts a string into the locale used by the virtual users * */ gchar *string_to_vuser_locale (const char *str) { gchar *retval; const gchar *charset; GError *err = NULL; if (cfg.use_system_encoding) g_get_charset (&charset); else charset = cfg.uname_encoding; retval = g_convert (str, -1, charset, "UTF-8", NULL, NULL, &err); if (err) { pur_log_err ("Unable to username string from UTF-8 to %s: %s", charset, err->message); g_error_free (err); } /* We return NULL here if conversion failed! */ return retval; } /* Converts a string encoding in virtual users locale to UTF-8 */ gchar *string_from_vuser_locale (const char *str) { gchar *retval; const gchar *charset; GError *err = NULL; if (cfg.use_system_encoding) g_get_charset (&charset); else charset = cfg.uname_encoding; retval = g_convert (str, -1, "UTF-8", charset, NULL, NULL, &err); if (err) { pur_log_err ("Unable to username string from %s to UTF-8: %s", charset, err->message); g_error_free (err); } /* We return NULL here if conversion failed! */ return retval; } /* Searches 'haystack' for a case insensitive match of 'needle' * This function most likely fails on UTF-8 encoded strings */ gboolean misc_str_isearch (const gchar *haystack, const gchar *needle) { gchar *n, *h; gboolean rv; g_return_val_if_fail (haystack != NULL, FALSE); g_return_val_if_fail (needle != NULL, FALSE); n = g_ascii_strdown (needle, -1); h = g_ascii_strdown (haystack, -1); if (strstr (h, n)) rv = TRUE; else rv = FALSE; g_free (n); g_free (h); return rv; } /* Elipsize a string at length 'len'. * Example: pur_elipsize ("eat my shorts", 6) => "eat my..." */ gchar *pur_elipzise (const gchar *orig_s, guint len) { gchar *rv; if (strlen (orig_s) < len + 3) return g_strdup (orig_s); rv = (gchar *) g_strndup (orig_s, len + 3 + 1); rv[len] = rv[len + 1] = rv[len + 2] = '.'; rv[len + 3] = '\0'; return rv; } gchar *filename_without_extension (const gchar *filename) { if (filename == NULL || *filename == '\0') return g_strdup (filename); const gchar *ext = strrchr (filename, '.'); if (ext == NULL) return g_strdup (filename); return g_strndup (filename, gpointer_diff (ext, filename)); } gboolean misc_stop_server (GError **err) { GError *i_err = NULL; gchar *cmd, *out_stdout, *out_stderr; gint ret, exitstatus; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); cmd = g_strdup_printf ("%s stop", cfg.cmd_startstop); pur_log_nfo ("Stopping server: %s", cmd); ret = g_spawn_command_line_sync (cmd, &out_stdout, &out_stderr, &exitstatus, &i_err); g_free (cmd); g_free (out_stdout); g_free (out_stderr); if (!ret) { exitstatus = WEXITSTATUS(exitstatus); if (exitstatus != 0) pur_log_wrn ("Stop server failed, child exited abnormally: %d", exitstatus); g_propagate_error (err, i_err); return FALSE; } return TRUE; } gboolean misc_start_server (GError **err) { GError *i_err = NULL; gchar *cmd, *out_stdout, *out_stderr; gint ret, exitstatus; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); cmd = g_strdup_printf ("%s start", cfg.cmd_startstop); pur_log_nfo ("Starting server: %s", cmd); ret = g_spawn_command_line_sync (cmd, &out_stdout, &out_stderr, &exitstatus, &i_err); g_free (cmd); /* FIXME: Do something clever with the output */ g_free (out_stdout); g_free (out_stderr); if (!ret) { exitstatus = WEXITSTATUS(exitstatus); if (exitstatus != 0) pur_log_wrn ("Start server failed, child exited abnormally: %d", exitstatus); g_propagate_error (err, i_err); return FALSE; } return TRUE; } gint misc_close_connection (guint pid) { gint ret; /* FIXME: There is no safe way to sanity check this.. but this prevents us from * at least killing init and the kernel services :-) */ if (pid < 100) return 0; #ifndef SIGTERM pur_log_wrn ("SIGTERM is not defined, defining it to 15"); #define SIGTERM 15 #endif /* SIGTERM */ ret = kill (pid, SIGTERM); if (ret == -1) { perror ("kill"); pur_log_wrn ("Could not close kill process %d\n", pid); return 0; } return 1; } gchar *misc_find_file_in_dirs (const gchar *filename, const gchar *dirs) { gchar *tmp, **dirs_arr, **start; start = dirs_arr = g_strsplit (dirs, " ", 0); while (*dirs_arr) { tmp = g_build_filename (*dirs_arr, filename, NULL); if (g_file_test (tmp, G_FILE_TEST_IS_REGULAR)) return tmp; g_free (tmp); dirs_arr++; } g_strfreev (start); return NULL; } gchar *misc_find_prog_in_dirs (const gchar *filename, const gchar *dirs) { gchar *tmp, **dirs_arr, **start; start = dirs_arr = g_strsplit (dirs, " ", 0); while (*dirs_arr) { tmp = g_build_filename (*dirs_arr, filename, NULL); if (g_file_test (tmp, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE)) return tmp; g_free (tmp); dirs_arr++; } g_strfreev (start); return NULL; } gchar *misc_get_line_beginning_with (const gchar *filename, const gchar *needle) { FILE *fl; gchar buf[200], *rv; gint len; g_return_val_if_fail (filename != NULL, NULL); g_return_val_if_fail (needle != NULL, NULL); if ((fl = fopen (filename, "r")) == NULL) { pur_log_dbg ("helper.c: Unable to open %s for reading", filename); return NULL; } rv = NULL; len = strlen (needle); while (!feof (fl)) { fgets (buf, 200, fl); if (strncmp (buf, needle, len) == 0) { rv = g_strdup (buf); break; } } fclose (fl); return rv; } /* Tries to locate the users web browser by the following heuristics: * 1) Check $BROWSER environment variable * 2) Check gconf for GNOME default * 3) Check if any of the hardcoded defaults exists: konqueror, firefox, mozilla * * FIXME: Should be enhanced to get KDEs default, but I don't know how. Also, browser * source should be dependent on which DE the user is running => check for KDE/GNOME! */ gchar *misc_find_webbrowser (void) { gchar *browser = NULL; gchar *output = NULL; /* First choise: the $BROWSER environment variable */ if (g_getenv("BROWSER")) { pur_log_dbg ("Web browser found by $BROWSER envvar: %s", g_getenv ("BROWSER")); return g_strdup (g_getenv("BROWSER")); } /* Check gconf if available - this is used by GNOME */ if (g_find_program_in_path("gconftool-2") && g_spawn_command_line_sync ("gconftool-2 -g " "/desktop/gnome/url-handlers/http/enabled " "/desktop/gnome/url-handlers/http/command", &output, NULL, NULL, NULL)) { gchar **values = g_strsplit(g_strchomp(output), "\n", 2); if (arr_count(values) == 2) { pur_log_dbg ("Web browser found by gconftool-2: [%s], [%s])", values[0], values[1]); if (strcmp (values[0], "true") == 0) browser = g_strdup (values[1]); } g_strfreev (values); } g_free (stdout); /* Had I known how to check for default browser in KDE, it would * be done here. But I don't know this, so lets try some hard coded ones instead */ if (!browser) { if (g_find_program_in_path ("konqueror")) browser = g_strdup ("konqueror"); else if (g_find_program_in_path ("firefox")) browser = g_strdup ("firefox"); else if (g_find_program_in_path ("mozilla")) browser = g_strdup ("mozilla"); pur_log_dbg ("Web browser found by hard-coded defaults: %s", browser); } if (!browser) return NULL; if (!strstr (browser, "%s")) { char *tmp = g_strconcat (browser, " %s", NULL); g_free (browser); browser = tmp; } return browser; } gboolean misc_create_passwd_file (const gchar *filename) { FILE *f; if ((f = fopen (filename, "w")) == NULL) { pur_log_wrn ("Could not create password file: %s", strerror (errno)); return FALSE; } fclose (f); return TRUE; } /* Creates a directory and all its components. Also sets the owner and group of the directory */ /* If owner and/or group shouldn't be set, specify -1 as uid/gid. */ gboolean misc_create_directory (const gchar *directory, gint uid, gint gid, GError **err) { gchar **parts; gboolean rv = TRUE; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); if (!g_path_is_absolute(directory)) { g_set_error(err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "'%s' is not a valid directory", directory); return FALSE; } parts = g_strsplit(directory, G_DIR_SEPARATOR_S, -1); GString *s = g_string_new(""); for (gint i = 1; parts[i] != NULL; i++) { g_string_append_c(s, '/'); g_string_append(s, parts[i]); if (g_file_test (s->str, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) continue; if (mkdir(s->str, 0755) != 0) { g_set_error(err, PUREADMIN_MAIN_ERROR, PA_MAIN_ERROR_FAILED, "Couldn't create directory: %s", g_strerror(errno)); rv = FALSE; break; } } g_strfreev(parts); g_string_free(s, TRUE); if (rv == TRUE) chown(directory, uid, gid); return rv; } /* Crypt functions taken pure-pw distributed with pureftpd source package: * Copyright (c) 2001, 2002, 2003 Frank Denis with the * help of all Pure-FTPd contributors. * * Modified slightly to use GLibs random numbers */ gchar *misc_crypt_passwd (const gchar * const pwd) { static const char crcars[64] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; register const char *crypted; if ((crypted = (const char *) /* Blowfish */ crypt("test", "$2a$07$1234567890123456789012")) != NULL && strcmp(crypted, "$2a$07$123456789012345678901uKO4" "/IReKqBzRzT6YaajGvw20UBdHW7m") == 0) { char salt[] = "$2a$07$0000000000000000000000"; int c = 28; do { c--; salt[c] = crcars[g_random_int() & 63]; } while (c > 7); return (char *) crypt(pwd, salt); } else if ((crypted = (const char *) /* MD5 */ crypt("test", "$1$12345678$")) != NULL && strcmp(crypted, "$1$12345678$oEitTZYQtRHfNGmsFvTBA/") == 0) { char salt[] = "$1$00000000"; int c = 10; do { c--; salt[c] = crcars[g_random_int() & 63]; } while (c > 3); return (char *) crypt(pwd, salt); } else if ((crypted = (const char *) /* Extended DES */ crypt("test", "_.../1234")) != NULL && strcmp(crypted, "_.../1234PAPUVmqGzpU") == 0) { char salt[] = "_.../0000"; int c = 8; do { c--; salt[c] = crcars[g_random_int() & 63]; } while (c > 5); return (char *) crypt(pwd, salt); } /* Simple DES */ { char salt[] = "00"; salt[0] = crcars[g_random_int() & 63]; salt[1] = crcars[g_random_int() & 63]; return (char *) crypt(pwd, salt); } } pureadmin-0.4/src/binreloc.h0000644000175000017500000000473110667602721013033 00000000000000/* * BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. */ #ifndef __BINRELOC_H__ #define __BINRELOC_H__ #include G_BEGIN_DECLS /** These error codes can be returned by br_init(), br_init_lib(), gbr_init() or gbr_init_lib(). */ typedef enum { /** Cannot allocate memory. */ GBR_INIT_ERROR_NOMEM, /** Unable to open /proc/self/maps; see errno for details. */ GBR_INIT_ERROR_OPEN_MAPS, /** Unable to read from /proc/self/maps; see errno for details. */ GBR_INIT_ERROR_READ_MAPS, /** The file format of /proc/self/maps is invalid; kernel bug? */ GBR_INIT_ERROR_INVALID_MAPS, /** BinReloc is disabled (the ENABLE_BINRELOC macro is not defined). */ GBR_INIT_ERROR_DISABLED } GbrInitError; #ifndef BINRELOC_RUNNING_DOXYGEN /* Mangle symbol names to avoid symbol collisions with other ELF objects. */ #define gbr_find_exe lKAb4610911513471_gbr_find_exe #define gbr_find_exe_dir lKAb4610911513471_gbr_find_exe_dir #define gbr_find_prefix lKAb4610911513471_gbr_find_prefix #define gbr_find_bin_dir lKAb4610911513471_gbr_find_bin_dir #define gbr_find_sbin_dir lKAb4610911513471_gbr_find_sbin_dir #define gbr_find_data_dir lKAb4610911513471_gbr_find_data_dir #define gbr_find_locale_dir lKAb4610911513471_gbr_find_locale_dir #define gbr_find_lib_dir lKAb4610911513471_gbr_find_lib_dir #define gbr_find_libexec_dir lKAb4610911513471_gbr_find_libexec_dir #define gbr_find_etc_dir lKAb4610911513471_gbr_find_etc_dir #endif gboolean gbr_init (GError **error); gboolean gbr_init_lib (GError **error); gchar *gbr_find_exe (const gchar *default_exe); gchar *gbr_find_exe_dir (const gchar *default_dir); gchar *gbr_find_prefix (const gchar *default_prefix); gchar *gbr_find_bin_dir (const gchar *default_bin_dir); gchar *gbr_find_sbin_dir (const gchar *default_sbin_dir); gchar *gbr_find_data_dir (const gchar *default_data_dir); gchar *gbr_find_locale_dir (const gchar *default_locale_dir); gchar *gbr_find_lib_dir (const gchar *default_lib_dir); gchar *gbr_find_libexec_dir (const gchar *default_libexec_dir); gchar *gbr_find_etc_dir (const gchar *default_etc_dir); G_END_DECLS #endif /* __BINRELOC_H__ */ pureadmin-0.4/src/logfile.c0000644000175000017500000001632310667602721012652 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Logfile-functions incl. callbacks to manage the logfile-viewer * * Copyright (C) 2003 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "globals.h" #include "cfg.h" #include "helper.h" #include "gui_helper.h" #include "logfile.h" #include "famwrap.h" FILE *logfile = NULL; GtkWidget *logview = NULL; GtkTextBuffer *viewbuffer = NULL; GtkTextTag *logview_tags[NUM_LOGTAGS]; static gchar cur_logfile[FILEPATH_MAX]; #define LOG_BUF_LEN 1024 /* Appends a line to the logview. 'buf' must be valid UTF-8 */ static void logview_append_line (const gchar *buf, log_textview_mode mode) { GtkTextIter iter; static GtkTextMark *mark = NULL; gtk_text_buffer_get_end_iter (viewbuffer, &iter); gtk_text_buffer_insert_with_tags (viewbuffer, &iter, buf, -1, logview_tags[mode], NULL); if (!mark) mark = gtk_text_buffer_create_mark (viewbuffer, "last_line", &iter, FALSE); else gtk_text_buffer_move_mark (viewbuffer, mark, &iter); gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (logview), mark, 0, TRUE, 0, 1); } static log_textview_mode get_logline_mode (const gchar *line) { log_textview_mode mode = LOG_INFO; if (strstr (line, "[NOTICE]")) mode = LOG_NOTICE; else if (strstr (line, "[WARNING]")) mode = LOG_WARNING; else if (strstr (line, "[ERROR]")) mode = LOG_ERROR; else if (strstr (line, "[DEBUG]")) mode = LOG_DEBUG; return mode; } /** GLOBAL FUNCTIONS **/ /* init_logfile: Initializes the logwindow * * Returns: TRUE if everything is setup correctly * FALSE if something went wrong (or if FAM is disabled) */ gboolean init_logfile (void) { static GtkWidget *lbl = NULL; PangoFontDescription *font_desc; if (!logview) { logview = MW("logview"); if (!logview) return FALSE; font_desc = pango_font_description_new (); pango_font_description_set_family_static (font_desc, "monospace"); gtk_widget_modify_font (logview, font_desc); pango_font_description_free (font_desc); viewbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logview)); } /* This shouldn't even be called when not defined, but let's check it anyway... */ #ifndef HAVE_LIBFAM return FALSE; #endif if (!lbl) lbl = MW("lbl_logfilename"); if (!logfile) { if (!(logfile = fopen (cfg.logfile, "r"))) { pur_log_wrn ("Unable to open logfile %s: %s", cfg.logfile, strerror (errno)); log_display_error_text (2); return FALSE; } /* We use a local copy of the filename, in case someone changes cfg.logfile, and we want to modify the FAM-watch */ strncpy (cur_logfile, cfg.logfile, FILEPATH_MAX); } if (!fam_set_watch (cfg.logfile, read_logfile)) { close_logfile (); log_display_error_text (3); return FALSE; } gtk_label_set_text (GTK_LABEL (lbl), cur_logfile); return TRUE; } /* close_logfile: Closes the logfile and removes any FAM watches * that are open. Also frees all resources allocated. */ void close_logfile (void) { #ifndef HAVE_LIBFAM return; #endif if (cur_logfile && *cur_logfile) fam_delete_watch (); if (logfile) fclose (logfile); logfile = NULL; log_clear_logview (); } /* log_clear_logview: Removes all text in the logview * */ void log_clear_logview (void) { if (viewbuffer) gtk_text_buffer_set_text (viewbuffer, "", -1); } /* log_display_error_text: Display an errormessage explaining why * logfile viewer has been disabled. * * Argument: reason: * 0 ==> FAM isn't installed, * 1 ==> FAM isn't running. * 2 ==> Couldn't open the specified logfile */ void log_display_error_text (gint reason) { GtkWidget *btn, *lbl; GtkTextIter iter; gchar *err_msg = NULL; if (!logview) { logview = MW("logview"); if (!logview) return; viewbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logview)); } pur_log_dbg ("Displaying logfile errortext, reason: %d", reason); lbl = MW("lbl_logfilename"); gtk_label_set_text (GTK_LABEL (lbl), _("[Logfile viewer Disabled]")); gtk_text_buffer_get_end_iter (viewbuffer, &iter); switch (reason) { case 0: err_msg = g_strdup (_("Logfile viewer has been disabled because FAM isn't installed on this computer. " "If you want to use the logfile viewer you need to install FAM and then recompile PureAdmin\n\n" "Check your distribution for appropriate packages or visit " "http://oss.sgi.com/projects/fam/ for more info about FAM.")); break; case 1: err_msg = g_strdup (_("Logfile viewer has been disabled because PureAdmin couldn't connect to local FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n\n" "Check your configuration for FAM if you want to use the logfile viewer.")); break; case 2: err_msg = g_strdup (_("Logfile viewer has been disable because PureAdmin could not open the specified logfile.\n" "Make sure that you are running as a user that has permission to open the logfile.")); break; case 3: default: err_msg = g_strdup (_("Logfile viewer has been disable because PureAdmin could not watch for changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the logfile.")); break; } gtk_text_buffer_insert_with_tags (viewbuffer, &iter, err_msg, -1, logview_tags[LOG_ERROR], NULL); g_free (err_msg); btn = MW("btn_logview_clear"); gtk_widget_set_sensitive (btn, FALSE); btn = MW("btn_logview_reread"); gtk_widget_set_sensitive (btn, FALSE); } /* read_logfile: Reads the newly added contents of the logfile */ void read_logfile (void) { gchar buf[LOG_BUF_LEN]; gint mode = 0; gchar *utf8_str; if (!logfile) init_logfile (); pur_log_dbg ("Reading logfile"); if (fseek (logfile, 0, SEEK_CUR) != 0) /* To clear an invalid EOF indicator for the stream, and to verify that there is new data to be read...*/ return; while (!feof (logfile)) { memset (buf, '\0', LOG_BUF_LEN); fgets (buf, LOG_BUF_LEN, logfile); if (misc_str_is_only_whitespace (buf)) continue; utf8_str = NULL; if (cfg.logmethod == LOG_SYSLOG && strstr (buf, "pure-ftpd:")) { utf8_str = string_to_utf8 (buf); mode = get_logline_mode (buf); /* Eventually filter old log-messages */ logview_append_line (utf8_str, mode); } else if (cfg.logmethod == LOG_CUSTOM) { utf8_str = string_to_utf8 (buf); logview_append_line (utf8_str, LOG_INFO); } g_free (utf8_str); } } pureadmin-0.4/src/helpview.h0000644000175000017500000000224410667602721013056 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Functions for displaying help in the application. * * Copyright (C) 2003 Isak Savo */ #ifndef __HELPVIEW_H__ #define __HELPVIEW_H__ typedef enum { HLP_ITEM_INDEX = 0, HLP_ITEM_INTRODUCTION = 2, HLP_ITEM_MAIN_WINDOW, HLP_ITEM_USER_MANAGER, HLP_ITEM_PREFERENCES, NUM_HLP_ITEMS } hlp_items_t; void hlp_show_help (hlp_items_t node); void hlp_terminate (void); #endif /* __HELPVIEW_H__ */ pureadmin-0.4/src/famwrap.c0000644000175000017500000001422010667602721012660 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Wrapper functions for FAM (File Alteration Monitor). Used to monitor changes in files and directories. * * Copyright (C) 2003-2004 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "globals.h" #include "famwrap.h" #ifdef HAVE_LIBFAM #include #include "globals.h" #include "helper.h" FAMConnection *famconn = NULL; FAMRequest *req = NULL; gint input_id = 0; GIOChannel *iochannel = NULL; void (*event_cb_func)(void) = NULL; char *fam_event_names[] = { "", "FAMChanged", "FAMDeleted", "FAMStartExecuting", "FAMStopExecuting", "FAMCreated", "FAMMoved", "FAMAcknowledge", "FAMExists", "FAMEndExist" }; static gboolean fam_event_handler (GIOChannel *src, GIOCondition cond, gpointer data); /* Only for internal use, connects to local FAM-service */ static gboolean connect_to_fam () { #ifdef HAVE_LIBFAM famconn = g_new0 (FAMConnection, 1); pur_log_dbg ("Opening FAM connection..."); if (FAMOpen (famconn) != 0) { g_free (famconn); famconn = NULL; pur_log_wrn ("Unable to connect to FAM!"); return FALSE; } return TRUE; #else /* HAVE_LIBFAM */ pur_log_dbg ("Can't connect to FAM: not supported!"); return FALSE; #endif /* HAVE_LIBFAM */ } /*** Public Functions ***/ /* fam_add_watch: Adds a watch to a file and calls a function when a change is noticed. * * Args: * fname - The name of the file that should be watched. * func - A pointer to the function that should be called. Function should be of type "void function (void)" * Returns: * TRUE if watch was added, else FALSE. */ gboolean fam_set_watch (const gchar *fname, void (*func)) { pur_log_dbg ("Adding watch: %s", fname); if (!fname || g_file_test (fname, G_FILE_TEST_EXISTS) == FALSE) return FALSE; /* Connect to FAM if not done before */ if (famconn == NULL) { if (!connect_to_fam ()) return FALSE; iochannel = g_io_channel_unix_new (FAMCONNECTION_GETFD(famconn)); if (!iochannel) { pur_log_err ("Unable to create iochannel"); return FALSE; } input_id = g_io_add_watch (iochannel, G_IO_IN | G_IO_HUP, (GIOFunc) fam_event_handler, NULL); pur_log_dbg ("GIOChannel Input watch added, id=%d, fd=%d", input_id, FAMCONNECTION_GETFD(famconn)); g_io_channel_unref (iochannel); /* Remove our reference (add_watch() has one already) */ } /* First time allocation */ if (!req) req = g_new0 (FAMRequest, 1); if (FAMMonitorFile (famconn, fname, req, NULL) == -1) { g_free (req); req = NULL; pur_log_err ("FAMMonitorFile: %s", g_strerror (errno)); return FALSE; } event_cb_func = func; return TRUE; } /* fam_suspend_watch: Suspends (temporary disables) a watch * * Returns: * TRUE if suspension was successful, otherwise FALSE. */ gboolean fam_suspend_watch (void) { int res; if (!famconn || !req) return FALSE; res = FAMSuspendMonitor(famconn, req); if (res != 0) return FALSE; /* Error while suspending */ return TRUE; } /* fam_resume_watch: Resumes a previously suspended watch * * Returns: * TRUE if the resume was successful, otherwise FALSE. */ gboolean fam_resume_watch (void) { int res; if (!famconn || !req) return FALSE; res = FAMResumeMonitor(famconn, req); if (res != 0) return FALSE; /* Error while resuming */ return TRUE; } /* fam_delete_watch: Cancels a watch. No more notifixations will be recieved for that file! * * Returns: * TRUE if the deletion was successful, otherwise FALSE. */ gboolean fam_delete_watch (void) { int res; if (!famconn || !req) return FALSE; /* g_print ("Removing watch: %s\n", fname); */ res = FAMCancelMonitor (famconn, req); if (res != 0) return FALSE; /* Error while canceling */ g_free (req); req = NULL; return TRUE; } /* fam_terminate: Removes all watches and terminates connection to local FAM service. * * Returns: * TRUE if all went well, otherwise FALSE. */ gboolean fam_terminate (void) { gboolean ret = TRUE; if (!famconn) return TRUE; /* We consider termination a success if a connection was never established... */ g_source_remove (input_id); input_id = 0; FAMClose (famconn); g_free (famconn); famconn = NULL; return ret; } /* fam_event_handler: Internal function, handles events and calls the * appropiate function depending on the filename */ static gboolean fam_event_handler (GIOChannel *src, GIOCondition cond, gpointer data) { FAMEvent ev; while (FAMPending(famconn)) { if (FAMNextEvent(famconn, &ev) != 1) { /* Nuts! An error! Shut down & clean up. */ pur_log_err ("Error while receiving FAM-event! This shouldn't happen"); fam_terminate (); return FALSE; } switch (ev.code) { case FAMExists: case FAMChanged: /* Only call functions when file has changed or first time watch is enabled */ pur_log_dbg ("File %s changed, calling handler", ev.filename); if (event_cb_func) event_cb_func(); break; case FAMDeleted: fam_delete_watch (); pur_log_dbg ("Removing watch [%s] (file deleted)\n", ev.filename); break; default: break; } } return TRUE; } #else /* HAVE_LIBFAM */ gboolean fam_add_watch (const gchar *fname, void (*func)) { return FALSE; } gboolean fam_suspend_watch (void) { return FALSE; } gboolean fam_resume_watch (void) { return FALSE; } gboolean fam_delete_watch (void) { return TRUE; } gboolean fam_terminate (void) { return TRUE; } #endif /* HAVE_LIBFAM */ pureadmin-0.4/src/mainwin_cb.c0000644000175000017500000004365110667602721013343 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Callback-functions for the main window GUI. * * Copyright (C) 2003- Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "globals.h" #include "gui_helper.h" #include "mainwin.h" #include "prereq_usrmanager.h" #include "usr_manager.h" #include "helper.h" #include "prefwin.h" #include "cfg.h" #include "logfile.h" #include "helpview.h" popup_src_t popup_source; gboolean usermanager_initialized = FALSE; static void update_adv_info (void) { static GtkWidget *tree_activities = NULL; static GtkTreeModel *model = NULL; static GtkWidget *adv_info = NULL; static GtkTreeSelection *sel; GtkTreeIter iter; gboolean visible = TRUE, selected; gint id; PActivity *act; if (G_UNLIKELY (!tree_activities)) { tree_activities = MW("tree_activity"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_activities)); adv_info = MW("tbl_advanced_info"); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_activities)); } g_object_get (adv_info, "visible", &visible, NULL); selected = gtk_tree_selection_get_selected (sel, &model, &iter); if (visible) { if (selected) { gtk_tree_model_get (model, &iter, COL_ACT_ID, &id, -1); act = srv_get_activity_with_id (id); gui_update_info_frame (act); pactivity_free (act); } else gui_update_info_frame (NULL); /* Clear advanced info labels */ } } /* Gets the ID of the selected activity and stores it in the location pointed to by output_id. * Returns true if the id was found, otherwise false*/ static gboolean gui_tree_act_get_selected_id (guint *output_id) { static GtkWidget *tree_activities = NULL; static GtkTreeModel *model = NULL; static GtkTreeSelection *sel; GtkTreeIter iter; gboolean selected; gint id; if (G_UNLIKELY (!tree_activities)) { tree_activities = MW("tree_activity"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_activities)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_activities)); } selected = gtk_tree_selection_get_selected (sel, &model, &iter); if (!selected) /* Nothing is selected! */ return FALSE; gtk_tree_model_get (model, &iter, COL_ACT_ID, &id, -1); *output_id = id; return TRUE; } static gboolean gui_tree_usr_get_selected_user (gchar **user, gchar **host) { static GtkWidget *tree_users = NULL; static GtkTreeModel *model = NULL; static GtkTreeSelection *sel; GtkTreeIter iter; gboolean selected; if (G_UNLIKELY (!tree_users)) { tree_users = MW("tree_users"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_users)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_users)); } selected = gtk_tree_selection_get_selected (sel, &model, &iter); if (!selected) /* Nothing is selected! */ return FALSE; gtk_tree_model_get (model, &iter, COL_USR_USER, user, COL_USR_HOST, host, -1); if (host && user) return TRUE; else return FALSE; } gboolean trayicon_activate (EggStatusIcon *icon, gpointer user_data) { gtk_window_present (GTK_WINDOW(MW("main_window"))); g_object_unref (status_icon); status_icon = NULL; return FALSE; } gboolean on_main_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { exit_program (); return FALSE; } void on_main_window_destroy (GtkObject *object, gpointer user_data) { gtk_main_quit(); } gboolean on_mainwin_focus_in_event (GtkWidget *widget, GdkEventFocus *event, gpointer user_data) { hide_status_icon(); return FALSE; } void show_hide_advanced_info_cb (GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget *adv_info = MW("tbl_advanced_info"); cfg.show_advinfo = gtk_toggle_button_get_active (togglebutton); if (cfg.show_advinfo) { gtk_widget_show (adv_info); update_adv_info(); } else gtk_widget_hide (adv_info); } void on_tree_activity_cursor_changed (GtkTreeView *treeview, gpointer user_data) { guint id; update_adv_info (); if (gui_tree_act_get_selected_id(&id)) { PActivity *act = srv_get_activity_with_id (id); g_return_if_fail (act != NULL); user_list_select_user(act->username, act->remote_addr); pactivity_free (act); } } void on_btn_user_manager_clicked (GtkButton *button, gpointer user_data) { GtkWidget *dlg_usrman; GtkWidget *mainwin = MW("main_window"); if (prereq_are_all_requirements_met() == FALSE) { gboolean success = prereq_show_dialog(GTK_WINDOW(mainwin)); if (!success) return; } dlg_usrman = usr_init_usermanager_window (mainwin); gtk_window_present (GTK_WINDOW (dlg_usrman)); } void menu_quit_cb (GtkMenuItem *menuitem, gpointer user_data) { exit_program (); gtk_main_quit (); } void menu_preferences_cb (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *prefwin = pref_init_prefwindow (MW("main_window")); gtk_window_present (GTK_WINDOW(prefwin)); } void menu_srv_startstop_cb (GtkMenuItem *menuitem, gpointer user_data) { GError *err = NULL; int ret; gchar *msg, *title; gboolean running = ftp_runmode == RUNMODE_STANDALONE ? TRUE : FALSE; if (G_UNLIKELY (ftp_runmode == RUNMODE_INETD)) /* This won't happen, but I'm paranoid! */ return; if (!cfg.cmd_startstop) { gui_display_msgdialog (_("Startupscript Not Found"), _("PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) and " "/etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled."), MSGDLG_TYPE_ERROR, MW("main_window")); return; } if (running) ret = misc_stop_server (&err); else ret = misc_start_server (&err); if (G_UNLIKELY (ret == FALSE)) { if (running) { title = g_strdup (_("Failure to start server")); msg = g_strdup_printf (_("PureAdmin was unable to start the server because the execution of \"%s\" failed.\n" "Error reported was: %s"), cfg.cmd_startstop, err->message); } else { title = g_strdup (_("Failure to stop server")); msg = g_strdup_printf (_("PureAdmin was unable to stop the server because the execution of \"%s\" failed.\n" "Error reported was: %s"), cfg.cmd_startstop, err->message); } gui_display_msgdialog (title, msg, MSGDLG_TYPE_ERROR, MW("main_window")); g_free (title); g_free (msg); g_error_free (err); return; } if (running) ftp_runmode = RUNMODE_STOPPED; else ftp_runmode = RUNMODE_STANDALONE; gui_update_server_status (); } void menu_user_manager_cb (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dlg_usrman; if (!prereq_are_all_requirements_met()) if (!prereq_show_dialog(GTK_WINDOW(MW("main_window")))) return; dlg_usrman = usr_init_usermanager_window (MW("main_window")); gtk_window_present (GTK_WINDOW (dlg_usrman)); } void menu_connections_cb (GtkMenuItem *menuitem, gpointer user_data) { GtkTreeView *act_tree = GTK_TREE_VIEW (MW("tree_activity")); GtkTreeSelection *sel = gtk_tree_view_get_selection (act_tree); GtkTreeIter iter; GtkTreeModel *model = NULL; gtk_widget_set_sensitive (MW("mi_close_all"), srv_has_activities ()); gboolean selected = gtk_tree_selection_get_selected (sel, NULL, NULL); gtk_widget_set_sensitive (MW("mi_close_tx"), selected); gtk_widget_set_sensitive (MW("mi_notify"), selected); gchar *text; sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (MW("tree_users"))); selected = gtk_tree_selection_get_selected (sel, &model, &iter); gtk_widget_set_sensitive (MW("mi_disconnect"), selected); if (selected) { gchar *username = NULL; gtk_tree_model_get (model, &iter, COL_USR_USER, &username, -1); text = g_strconcat (_("Disconnect user"), " ", username, NULL); } else text = g_strdup (_("Disconnect user")); GtkWidget *label = gtk_bin_get_child (GTK_BIN(MW("mi_disconnect"))); gtk_label_set_text (GTK_LABEL(label), text); g_free (text); } void menu_close_tx_cb (GtkMenuItem *menuitem, gpointer user_data) { show_not_yet_implemented (GTK_WINDOW(MW("main_window"))); } void menu_disconnect_user_cb (GtkMenuItem *menuitem, gpointer user_data) { show_not_yet_implemented (GTK_WINDOW(MW("main_window"))); } void menu_close_connections_cb (GtkMenuItem *menuitem, gpointer user_data) { GList *act_list, *head; PActivity *activity; gint ret; head = act_list = srv_get_activities (); while (act_list) { activity = (PActivity *) act_list->data; g_print ("Closing connection with pid: %d...", activity->pid); ret = misc_close_connection (activity->pid); if (ret) g_print ("success\n"); else g_print ("failure\n"); act_list = act_list->next; } free_activity_list (head); } void menu_notify_cb (GtkMenuItem *menuitem, gpointer user_data) { show_not_yet_implemented (GTK_WINDOW(MW("main_window"))); } void menu_about_cb (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *about, *title; about = DW("dlg_about"); title = DW("lbl_title"); /* Make the About-text reflect the actual version */ gtk_label_set_text (GTK_LABEL (title), "" "PureAdmin v" VERSION ""); gtk_label_set_use_markup (GTK_LABEL (title), TRUE); gtk_dialog_run (GTK_DIALOG (about)); gtk_widget_hide (about); } void menu_help_cb (GtkMenuItem *menuitem, gpointer user_data) { hlp_show_help (HLP_ITEM_INDEX); } static void open_in_browser (const gchar *url) { gchar *browser = misc_find_webbrowser(); GError *err = NULL; if (!browser) { gchar *msg = g_strdup_printf (_("The default browser could not be located. You can solve this " "by either:\n" " \342\200\242 Setting the environment variable $BROWSER to the name of your web browser.\n" " \342\200\242 Open \"Preferred Applications\" in the GNOME control panel and set " "the browser there.\n\n" "The requested page is:\n" "%s"), url); gui_display_msgdialog (_("Couldn't launch browser"), msg, MSGDLG_TYPE_WARNING, MW("main_window")); g_free (msg); return; } gchar *quoted_url = g_shell_quote (url); gchar *cmd = g_strdup_printf (browser, quoted_url); pur_log_dbg ("Running: %s", cmd); gboolean success; success = g_spawn_command_line_async (cmd, &err); //success = FALSE; g_free (quoted_url); g_free (cmd); if (!success) { gchar *msg = g_strdup_printf (_("The web browser could not be started because of a system error. Try again and " "if the error remains, report this bug in the support forums.\n\n" "The reported error was: %s"), err->message); gui_display_msgdialog (_("Couldn't launch browser"), msg, MSGDLG_TYPE_ERROR, MW("main_window")); g_free (msg); } } void menu_online_support_cb (GtkMenuItem *menuitem, gpointer user_data) { const char *url = "http://purify.sourceforge.net/forums/"; open_in_browser (url); } void menu_online_documentation_cb (GtkMenuItem *menuitem, gpointer user_data) { const char *url = "http://purify.sourceforge.net/index.php?page=documentation"; open_in_browser (url); } gboolean on_tree_activity_popup_menu (GtkWidget *widget, gpointer user_data) { popup_source = POPUP_FROM_ACTTREE; gui_display_activity_popup (popup_source); return TRUE; } gboolean on_tree_activity_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GdkEventButton *event_button; if (event->type == GDK_BUTTON_PRESS) { event_button = (GdkEventButton *) event; if (event_button->button == 3) { popup_source = POPUP_FROM_ACTTREE; gui_display_activity_popup (popup_source); return TRUE; } } return FALSE; } gboolean on_tree_users_popup_menu (GtkWidget *widget, gpointer user_data) { popup_source = POPUP_FROM_USRTREE; gui_display_activity_popup (popup_source); return FALSE; } gboolean on_tree_users_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GdkEventButton *event_button; if (event->type == GDK_BUTTON_PRESS) { event_button = (GdkEventButton *) event; if (event_button->button == 3) { popup_source = POPUP_FROM_USRTREE; gui_display_activity_popup (popup_source); return TRUE; } } return FALSE; } void on_popup_close_tx (GtkMenuItem *menuitem, gpointer user_data) { guint id; PActivity *act; if (popup_source == POPUP_FROM_ACTTREE) { if (!gui_tree_act_get_selected_id (&id)) { pur_log_wrn ("Unable to fetch information about selected activity"); return; } act = srv_get_activity_with_id (id); pur_log_dbg ("Closing connection for user %s (pid: %d)", act->username, act->pid); misc_close_connection (act->pid); pactivity_free (act); } else { /* This should _never_ happen! */ pur_log_err ("Close transfer for user NOT possible!"); } } void on_popup_close_all_conns (GtkMenuItem *menuitem, gpointer user_data) { gchar *user, *host; guint id; gboolean success; PActivity *act; GList *conns, *head; if (popup_source == POPUP_FROM_ACTTREE) { if (!gui_tree_act_get_selected_id (&id)) { pur_log_wrn ("Unable to fetch information about selected activity\n"); return; } act = srv_get_activity_with_id (id); pur_log_dbg ("Closing all connection for user %s (pid: %d)\n", act->username, act->pid); conns = srv_get_pids_for_user_host (act->username, act->remote_addr); while (conns) { pur_log_dbg ("Killing process %d\n", GPOINTER_TO_INT (conns->data)); success = misc_close_connection (GPOINTER_TO_INT (conns->data)); if (!success) pur_log_err ("Failed to kill process %d\n", GPOINTER_TO_INT (conns->data)); conns = g_list_next (conns); } pactivity_free (act); g_list_free (conns); } else { if (!gui_tree_usr_get_selected_user (&user, &host)) { pur_log_wrn ("Unable to fetch information about selected user"); return; } pur_log_dbg ("Closing all connection for user %s (host: %s)\n", user, host); head = conns = srv_get_pids_for_user_host (user, host); while (conns) { pur_log_dbg ("Killing process %d\n", GPOINTER_TO_INT (conns->data)); success = misc_close_connection (GPOINTER_TO_INT (conns->data)); if (!success) pur_log_wrn ("Failed to kill process %d\n", GPOINTER_TO_INT (conns->data)); conns = g_list_next (conns); } g_list_free (head); } } void on_popup_show_userinfo (GtkMenuItem *menuitem, gpointer user_data) { guint id; gchar *user, *host; PActivity *act; GtkWidget *dlg_usrman; if (popup_source == POPUP_FROM_ACTTREE) { if (!gui_tree_act_get_selected_id (&id)) { pur_log_wrn ("Unable to fetch information about selected activity\n"); return; } act = srv_get_activity_with_id (id); user = act->username; pactivity_free (act); } else { if (!gui_tree_usr_get_selected_user (&user, &host)) { pur_log_wrn ("Unable to fetch information about selected user\n"); return; } } pur_log_dbg ("Showing userinfo for %s\n", user); if (!prereq_are_all_requirements_met()) if(!prereq_show_dialog(GTK_WINDOW(MW("main_window")))) return; dlg_usrman = usr_init_usermanager_window (MW("main_window")); gtk_window_set_transient_for (GTK_WINDOW(dlg_usrman), GTK_WINDOW (MW("main_window"))); usr_select_user (user); gtk_widget_show (dlg_usrman); gtk_window_present (GTK_WINDOW (dlg_usrman)); } void menu_debug_console_cb (GtkMenuItem *menuitem, gpointer user_data) { gtk_window_present (GTK_WINDOW (MW("dlg_debug"))); } /* Handles keyboard press events for the main window. Used to grab * hard-coded global keyboard shortcuts */ gboolean mainwin_keypress (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { guint modifier = event->state; static GtkWidget *notebook = NULL; #define PUR_CTRL_OR_SHIFT (modifier & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) if (G_UNLIKELY(!notebook)) notebook = MW("notebook1"); /* Alt+ shortcuts (ugly way, only check for ctrl/shift)*/ if (modifier & GDK_MOD1_MASK && !(PUR_CTRL_OR_SHIFT)) { switch (event->keyval){ case GDK_1: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); break; case GDK_2: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1); break; } } return FALSE; } void on_btn_logview_clear_clicked (GtkButton *button, gpointer user_data) { log_clear_logview (); } void on_btn_logview_reread_clicked (GtkButton *button, gpointer user_data) { close_logfile (); init_logfile (); } pureadmin-0.4/src/eggstatusicon.h0000644000175000017500000001036710667602721014117 00000000000000/* eggstatusicon.h: * * Copyright (C) 2003 Sun Microsystems, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Authors: * Mark McLoughlin */ #ifndef __EGG_STATUS_ICON_H__ #define __EGG_STATUS_ICON_H__ #include "eggtrayicon.h" #include G_BEGIN_DECLS #define EGG_TYPE_STATUS_ICON (egg_status_icon_get_type ()) #define EGG_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EGG_TYPE_STATUS_ICON, EggStatusIcon)) #define EGG_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EGG_TYPE_STATUS_ICON, EggStatusIconClass)) #define EGG_IS_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EGG_TYPE_STATUS_ICON)) #define EGG_IS_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EGG_TYPE_STATUS_ICON)) #define EGG_STATUS_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EGG_TYPE_STATUS_ICON, EggStatusIconClass)) typedef struct _EggStatusIcon EggStatusIcon; typedef struct _EggStatusIconClass EggStatusIconClass; typedef struct _EggStatusIconPrivate EggStatusIconPrivate; struct _EggStatusIcon { GObject parent_instance; EggStatusIconPrivate *priv; }; struct _EggStatusIconClass { GObjectClass parent_class; void (* activate) (EggStatusIcon *status_icon); void (* popup_menu) (EggStatusIcon *status_icon, guint buttton, guint32 activate_time); gboolean (* size_changed) (EggStatusIcon *status_icon, gint size); }; GType egg_status_icon_get_type (void); EggStatusIcon *egg_status_icon_new (void); EggStatusIcon *egg_status_icon_new_from_pixbuf (GdkPixbuf *pixbuf); EggStatusIcon *egg_status_icon_new_from_file (const gchar *filename); EggStatusIcon *egg_status_icon_new_from_stock (const gchar *stock_id); EggStatusIcon *egg_status_icon_new_from_animation (GdkPixbufAnimation *animation); void egg_status_icon_set_from_pixbuf (EggStatusIcon *status_icon, GdkPixbuf *pixbuf); void egg_status_icon_set_from_file (EggStatusIcon *status_icon, const gchar *filename); void egg_status_icon_set_from_stock (EggStatusIcon *status_icon, const gchar *stock_id); void egg_status_icon_set_from_animation (EggStatusIcon *status_icon, GdkPixbufAnimation *animation); GtkImageType egg_status_icon_get_image_type (EggStatusIcon *status_icon); GdkPixbuf *egg_status_icon_get_pixbuf (EggStatusIcon *status_icon); G_CONST_RETURN gchar *egg_status_icon_get_stock (EggStatusIcon *status_icon); GdkPixbufAnimation *egg_status_icon_get_animation (EggStatusIcon *status_icon); gint egg_status_icon_get_size (EggStatusIcon *status_icon); void egg_status_icon_set_tooltip (EggStatusIcon *status_icon, const gchar *tooltip_text, const gchar *tooltip_private); void egg_status_icon_set_balloon_text (EggStatusIcon *status_icon, const gchar *text); G_CONST_RETURN gchar *egg_status_icon_get_balloon_text (EggStatusIcon *status_icon); void egg_status_icon_set_is_blinking (EggStatusIcon *status_icon, gboolean enable_blinking); gboolean egg_status_icon_get_is_blinking (EggStatusIcon *status_icon); G_END_DECLS #endif /* __EGG_STATUS_ICON_H__ */ pureadmin-0.4/src/binreloc.c0000644000175000017500000004254210670523222013020 00000000000000/* * BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. */ #ifndef __BINRELOC_C__ #define __BINRELOC_C__ #ifdef ENABLE_BINRELOC # include # include # include #endif /* ENABLE_BINRELOC */ #include #include #include #include #include "binreloc.h" G_BEGIN_DECLS /** @internal * Find the canonical filename of the executable. Returns the filename * (which must be freed) or NULL on error. If the parameter 'error' is * not NULL, the error code will be stored there, if an error occured. */ static char * _br_find_exe (GbrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = GBR_INIT_ERROR_DISABLED; return NULL; #else char *path, *path2, *line, *result; size_t buf_size; ssize_t size; struct stat stat_buf; FILE *f; /* Read from /proc/self/exe (symlink) */ if (sizeof (path) > SSIZE_MAX) buf_size = SSIZE_MAX - 1; else buf_size = PATH_MAX - 1; path = (char *) g_try_malloc (buf_size); if (path == NULL) { /* Cannot allocate memory. */ if (error) *error = GBR_INIT_ERROR_NOMEM; return NULL; } path2 = (char *) g_try_malloc (buf_size); if (path2 == NULL) { /* Cannot allocate memory. */ if (error) *error = GBR_INIT_ERROR_NOMEM; g_free (path); return NULL; } strncpy (path2, "/proc/self/exe", buf_size - 1); while (1) { int i; size = readlink (path2, path, buf_size - 1); if (size == -1) { /* Error. */ g_free (path2); break; } /* readlink() success. */ path[size] = '\0'; /* Check whether the symlink's target is also a symlink. * We want to get the final target. */ i = stat (path, &stat_buf); if (i == -1) { /* Error. */ g_free (path2); break; } /* stat() success. */ if (!S_ISLNK (stat_buf.st_mode)) { /* path is not a symlink. Done. */ g_free (path2); return path; } /* path is a symlink. Continue loop and resolve this. */ strncpy (path, path2, buf_size - 1); } /* readlink() or stat() failed; this can happen when the program is * running in Valgrind 2.2. Read from /proc/self/maps as fallback. */ buf_size = PATH_MAX + 128; line = (char *) g_try_realloc (path, buf_size); if (line == NULL) { /* Cannot allocate memory. */ g_free (path); if (error) *error = GBR_INIT_ERROR_NOMEM; return NULL; } f = fopen ("/proc/self/maps", "r"); if (f == NULL) { g_free (line); if (error) *error = GBR_INIT_ERROR_OPEN_MAPS; return NULL; } /* The first entry should be the executable name. */ result = fgets (line, (int) buf_size, f); if (result == NULL) { fclose (f); g_free (line); if (error) *error = GBR_INIT_ERROR_READ_MAPS; return NULL; } /* Get rid of newline character. */ buf_size = strlen (line); if (buf_size <= 0) { /* Huh? An empty string? */ fclose (f); g_free (line); if (error) *error = GBR_INIT_ERROR_INVALID_MAPS; return NULL; } if (line[buf_size - 1] == 10) line[buf_size - 1] = 0; /* Extract the filename; it is always an absolute path. */ path = strchr (line, '/'); /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || path == NULL) { fclose (f); g_free (line); if (error) *error = GBR_INIT_ERROR_INVALID_MAPS; return NULL; } path = g_strdup (path); g_free (line); fclose (f); return path; #endif /* ENABLE_BINRELOC */ } /** @internal * Find the canonical filename of the executable which owns symbol. * Returns a filename which must be freed, or NULL on error. */ static char * _br_find_exe_for_symbol (const void *symbol, GbrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = GBR_INIT_ERROR_DISABLED; return (char *) NULL; #else #define SIZE PATH_MAX + 100 FILE *f; size_t address_string_len; char *address_string, line[SIZE], *found; if (symbol == NULL) return (char *) NULL; f = fopen ("/proc/self/maps", "r"); if (f == NULL) return (char *) NULL; address_string_len = 4; address_string = (char *) g_try_malloc (address_string_len); found = (char *) NULL; while (!feof (f)) { char *start_addr, *end_addr, *end_addr_end, *file; void *start_addr_p, *end_addr_p; size_t len; if (fgets (line, SIZE, f) == NULL) break; /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || strchr (line, '/') == NULL) continue; /* Parse line. */ start_addr = line; end_addr = strchr (line, '-'); file = strchr (line, '/'); /* More sanity check. */ if (!(file > end_addr && end_addr != NULL && end_addr[0] == '-')) continue; end_addr[0] = '\0'; end_addr++; end_addr_end = strchr (end_addr, ' '); if (end_addr_end == NULL) continue; end_addr_end[0] = '\0'; len = strlen (file); if (len == 0) continue; if (file[len - 1] == '\n') file[len - 1] = '\0'; /* Get rid of "(deleted)" from the filename. */ len = strlen (file); if (len > 10 && strcmp (file + len - 10, " (deleted)") == 0) file[len - 10] = '\0'; /* I don't know whether this can happen but better safe than sorry. */ len = strlen (start_addr); if (len != strlen (end_addr)) continue; /* Transform the addresses into a string in the form of 0xdeadbeef, * then transform that into a pointer. */ if (address_string_len < len + 3) { address_string_len = len + 3; address_string = (char *) g_try_realloc (address_string, address_string_len); } memcpy (address_string, "0x", 2); memcpy (address_string + 2, start_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &start_addr_p); memcpy (address_string, "0x", 2); memcpy (address_string + 2, end_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &end_addr_p); if (symbol >= start_addr_p && symbol < end_addr_p) { found = file; break; } } g_free (address_string); fclose (f); if (found == NULL) return (char *) NULL; else return g_strdup (found); #endif /* ENABLE_BINRELOC */ } static gchar *exe = NULL; static void set_gerror (GError **error, GbrInitError errcode); /** Initialize the BinReloc library (for applications). * * This function must be called before using any other BinReloc functions. * It attempts to locate the application's canonical filename. * * @note If you want to use BinReloc for a library, then you should call * gbr_init_lib() instead. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @param error If BinReloc failed to initialize, then the error report will * be stored in this variable. Set to NULL if you don't want an * error report. See the #GbrInitError for a list of error * codes. * * @returns TRUE on success, FALSE if BinReloc failed to initialize. */ gboolean gbr_init (GError **error) { GbrInitError errcode = 0; /* Locate the application's filename. */ exe = _br_find_exe (&errcode); if (exe != NULL) /* Success! */ return TRUE; else { /* Failed :-( */ set_gerror (error, errcode); return FALSE; } } /** Initialize the BinReloc library (for libraries). * * This function must be called before using any other BinReloc functions. * It attempts to locate the calling library's canonical filename. * * @note The BinReloc source code MUST be included in your library, or this * function won't work correctly. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @returns TRUE on success, FALSE if a filename cannot be found. */ gboolean gbr_init_lib (GError **error) { GbrInitError errcode = 0; exe = _br_find_exe_for_symbol ((const void *) "", &errcode); if (exe != NULL) /* Success! */ return TRUE; else { /* Failed :-( */ set_gerror (error, errcode); return exe != NULL; } } static void set_gerror (GError **error, GbrInitError errcode) { gchar *error_message; if (error == NULL) return; switch (errcode) { case GBR_INIT_ERROR_NOMEM: error_message = "Cannot allocate memory."; break; case GBR_INIT_ERROR_OPEN_MAPS: error_message = "Unable to open /proc/self/maps for reading."; break; case GBR_INIT_ERROR_READ_MAPS: error_message = "Unable to read from /proc/self/maps."; break; case GBR_INIT_ERROR_INVALID_MAPS: error_message = "The file format of /proc/self/maps is invalid."; break; case GBR_INIT_ERROR_DISABLED: error_message = "Binary relocation support is disabled."; break; default: error_message = "Unknown error."; break; }; g_set_error (error, g_quark_from_static_string ("GBinReloc"), errcode, "%s", error_message); } /** Find the canonical filename of the current application. * * @param default_exe A default filename which will be used as fallback. * @returns A string containing the application's canonical filename, * which must be freed when no longer necessary. If BinReloc is * not initialized, or if the initialization function failed, * then a copy of default_exe will be returned. If default_exe * is NULL, then NULL will be returned. */ gchar * gbr_find_exe (const gchar *default_exe) { if (exe == NULL) { /* BinReloc is not initialized. */ if (default_exe != NULL) return g_strdup (default_exe); else return NULL; } return g_strdup (exe); } /** Locate the directory in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(exename) * \endcode * * @param default_dir A default directory which will used as fallback. * @return A string containing the directory, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_dir * will be returned. If default_dir is NULL, then NULL will be * returned. */ gchar * gbr_find_exe_dir (const gchar *default_dir) { if (exe == NULL) { /* BinReloc not initialized. */ if (default_dir != NULL) return g_strdup (default_dir); else return NULL; } return g_path_get_dirname (exe); } /** Locate the prefix in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(dirname(exename)) * \endcode * * @param default_prefix A default prefix which will used as fallback. * @return A string containing the prefix, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_prefix * will be returned. If default_prefix is NULL, then NULL will be * returned. */ gchar * gbr_find_prefix (const gchar *default_prefix) { gchar *dir1, *dir2; if (exe == NULL) { /* BinReloc not initialized. */ if (default_prefix != NULL) return g_strdup (default_prefix); else return NULL; } dir1 = g_path_get_dirname (exe); dir2 = g_path_get_dirname (dir1); g_free (dir1); return dir2; } /** Locate the application's binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/bin" * \endcode * * @param default_bin_dir A default path which will used as fallback. * @return A string containing the bin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_bin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ gchar * gbr_find_bin_dir (const gchar *default_bin_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_bin_dir != NULL) return g_strdup (default_bin_dir); else return NULL; } dir = g_build_filename (prefix, "bin", NULL); g_free (prefix); return dir; } /** Locate the application's superuser binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/sbin" * \endcode * * @param default_sbin_dir A default path which will used as fallback. * @return A string containing the sbin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_sbin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ gchar * gbr_find_sbin_dir (const gchar *default_sbin_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_sbin_dir != NULL) return g_strdup (default_sbin_dir); else return NULL; } dir = g_build_filename (prefix, "sbin", NULL); g_free (prefix); return dir; } /** Locate the application's data folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share" * \endcode * * @param default_data_dir A default path which will used as fallback. * @return A string containing the data folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_data_dir * will be returned. If default_data_dir is NULL, then NULL will be * returned. */ gchar * gbr_find_data_dir (const gchar *default_data_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_data_dir != NULL) return g_strdup (default_data_dir); else return NULL; } dir = g_build_filename (prefix, "share", NULL); g_free (prefix); return dir; } /** Locate the application's localization folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share/locale" * \endcode * * @param default_locale_dir A default path which will used as fallback. * @return A string containing the localization folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_locale_dir will be returned. * If default_locale_dir is NULL, then NULL will be returned. */ gchar * gbr_find_locale_dir (const gchar *default_locale_dir) { gchar *data_dir, *dir; data_dir = gbr_find_data_dir (NULL); if (data_dir == NULL) { /* BinReloc not initialized. */ if (default_locale_dir != NULL) return g_strdup (default_locale_dir); else return NULL; } dir = g_build_filename (data_dir, "locale", NULL); g_free (data_dir); return dir; } /** Locate the application's library folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/lib" * \endcode * * @param default_lib_dir A default path which will used as fallback. * @return A string containing the library folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_lib_dir will be returned. * If default_lib_dir is NULL, then NULL will be returned. */ gchar * gbr_find_lib_dir (const gchar *default_lib_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_lib_dir != NULL) return g_strdup (default_lib_dir); else return NULL; } dir = g_build_filename (prefix, "lib", NULL); g_free (prefix); return dir; } /** Locate the application's libexec folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/libexec" * \endcode * * @param default_libexec_dir A default path which will used as fallback. * @return A string containing the libexec folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_libexec_dir will be returned. * If default_libexec_dir is NULL, then NULL will be returned. */ gchar * gbr_find_libexec_dir (const gchar *default_libexec_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_libexec_dir != NULL) return g_strdup (default_libexec_dir); else return NULL; } dir = g_build_filename (prefix, "libexec", NULL); g_free (prefix); return dir; } /** Locate the application's configuration files folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/etc" * \endcode * * @param default_etc_dir A default path which will used as fallback. * @return A string containing the etc folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_etc_dir will be returned. * If default_etc_dir is NULL, then NULL will be returned. */ gchar * gbr_find_etc_dir (const gchar *default_etc_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_etc_dir != NULL) return g_strdup (default_etc_dir); else return NULL; } dir = g_build_filename (prefix, "etc", NULL); g_free (prefix); return dir; } G_END_DECLS #endif /* __BINRELOC_C__ */ pureadmin-0.4/src/usr_manager_cb.c0000644000175000017500000004215610667602721014203 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Callback-functions for the user manager GUI. * * Copyright (C) 2003- Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "dirbrowser.h" #include "gui_helper.h" #include "usr_manager.h" #include "helper.h" #include "helpview.h" void on_treeview_dlg_users_cursor_changed (GtkTreeView *treeview, gpointer user_data) { static GtkTreeModel *model = NULL; static GtkTreeSelection *sel = NULL; static GtkWidget *btn_edit, *btn_remove; GtkTreeIter iter; gchar *username; if (G_UNLIKELY (!model || !sel)) { model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); } if (G_UNLIKELY (!btn_edit || !btn_remove)) { btn_edit = UW("btn_edituser"); btn_remove = UW("btn_removeuser"); } if (!gtk_tree_selection_get_selected (sel, &model, &iter)) { gtk_widget_set_sensitive (btn_edit, FALSE); gtk_widget_set_sensitive (btn_remove, FALSE); return; } gtk_tree_model_get (model, &iter, COL_USRMAN_LOGIN, &username, -1); usr_widgets_set_info (username); gtk_widget_set_sensitive (btn_edit, TRUE); gtk_widget_set_sensitive (btn_remove, TRUE); } void on_usr_dlg_btn_edituser_clicked (GtkButton *button, gpointer user_data) { GtkWidget *btn_remove, *btn_add, *tree; GtkWidget *entry; tree = UW("tree_userlist"); btn_remove = UW("btn_removeuser"); btn_add = UW("btn_adduser"); usr_widgets_set_active_state (TRUE); gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); gtk_widget_set_sensitive (tree, FALSE); gtk_widget_set_sensitive (btn_remove, FALSE); gtk_widget_set_sensitive (btn_add, FALSE); entry = UW("entry_realname"); gtk_widget_grab_focus (entry); g_object_set_data (G_OBJECT (UW("usermanager")), "editing", GINT_TO_POINTER (TRUE)); } void on_usr_dlg_btn_removeuser_clicked (GtkButton *button, gpointer user_data) { static GtkTreeView *tree; static GtkTreeModel *model = NULL; static GtkTreeSelection *sel = NULL; GtkTreePath *path; GtkTreeIter iter; gchar *username, *msg; gint i; GError *err = NULL; if (!tree || !model || !sel) { tree = (GtkTreeView *) UW("tree_userlist"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)); } if (!gtk_tree_selection_get_selected (sel, &model, &iter)) return; path = gtk_tree_model_get_path (model, &iter); gtk_tree_model_get (model, &iter, COL_USRMAN_LOGIN, &username, -1); msg = g_strdup_printf (_("Remove User '%s'?"), username); if (gui_display_confirmdialog (msg, _("This will permanently remove the user from pureftpd, preventing him or her to login to your server.\nAre you sure you want to remove this user?"), _("Yes, _Remove User"), NULL, UW("usermanager")) != GTK_RESPONSE_YES) { g_free (msg); return; } g_free (msg); if (usr_remove_user (username, &err)) { i = usr_fill_users_list (); /* Try to restore the selection or move it to the row above if that exists */ while (i && gtk_tree_selection_path_is_selected (sel, path) == FALSE) { gtk_tree_selection_select_path (sel, path); i = gtk_tree_path_prev (path); } /* Trigger widget updates FIXME: Is this necessary? */ g_signal_emit_by_name ((gpointer) tree, "cursor_changed", tree, NULL); return; } else pur_log_err ("Error removing user: %s", err->message); switch (err->code) { case PA_USR_ERROR_PERMISSION_DENIED: msg = g_strdup_printf (_("You do not have permission to remove the user %s from the password-file. This could be because another process is accessing the file(s)."), username); gui_display_msgdialog (_("Error removing user."), msg, MSGDLG_TYPE_WARNING, UW("usermanager")); g_free (msg); break; case PA_USR_ERROR_COMMAND_NOT_FOUND: msg = g_strdup_printf (_("The user '%s' could not be removed because the pure-pw command could not be found. Make sure that it is installed and that the configuration points to the correct file."), username); gui_display_msgdialog (_("Error removing user."), msg, MSGDLG_TYPE_WARNING, UW("usermanager")); g_free (msg); break; case PA_USR_ERROR_FAILED: msg = g_strdup_printf (_("The user '%s' could not be removed."), username); gui_display_msgdialog (_("Error removing user."), msg, MSGDLG_TYPE_WARNING, UW("usermanager")); g_free (msg); break; case PA_USR_ERROR_USER_NOT_FOUND: msg = g_strdup_printf (_("The user '%s' could not be removed because it doesn't exist. If you are sure it exist, please contact the author of this program with a description of your problem."), username); gui_display_msgdialog (_("Error removing user."), msg, MSGDLG_TYPE_WARNING, UW("usermanager")); g_free (msg); break; } g_error_free (err); } void on_usr_dlg_btn_save_changes_clicked (GtkButton *button, gpointer user_data) { GtkWidget *btn_remove, *btn_add, *btn_edit; static GtkTreeView *tree; static GtkTreeModel *model = NULL; static GtkTreeSelection *sel = NULL; GtkTreePath *path; GtkTreeIter iter; GError *err = NULL; if (!tree) { tree = (GtkTreeView *) UW("tree_userlist"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)); } if (!gtk_tree_selection_get_selected (sel, &model, &iter)) /* This should never happen, but we need the iter anyway */ return; path = gtk_tree_model_get_path (model, &iter); btn_remove = UW("btn_removeuser"); btn_add = UW("btn_adduser"); btn_edit = UW("btn_edituser"); if (usr_save_user_info (&err)) { usr_widgets_set_active_state (FALSE); gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (tree), TRUE); gtk_widget_set_sensitive (btn_remove, TRUE); gtk_widget_set_sensitive (btn_add, TRUE); gtk_widget_set_sensitive (btn_edit, TRUE); usr_fill_users_list (); gtk_tree_selection_select_path (sel, path); g_object_set_data (G_OBJECT (UW("usermanager")), "editing", GINT_TO_POINTER (FALSE)); return; } else pur_log_err ("Error saving user: %s", err->message); switch (err->code) { case PA_USR_ERROR_PERMISSION_DENIED: gui_display_msgdialog (_("Error saving user."), _("You do not have permission to save the user-information. This could be because another process is accessing the required file(s).\nYou may try again and if that doesn't work, please contact the author with a description of your problem."), MSGDLG_TYPE_WARNING, UW("usermanager")); break; case PA_USR_ERROR_COMMAND_NOT_FOUND: gui_display_msgdialog (_("Error saving user."), _("The pure-pw command could not be found. Make sure that the command is installed and that the configuration points to the correct file.\n"), MSGDLG_TYPE_WARNING, UW("usermanager")); break; } g_error_free (err); } void on_usr_dlg_btn_adduser_clicked (GtkButton *button, gpointer user_data) { GtkWidget *dlg, *entry; gint response, len, response2; gchar *user = NULL, *pw, *encrypted = NULL; gchar *user_vlocale; gboolean add = FALSE, keep_asking = TRUE; GError *err = NULL; dlg = UW("dlg_ask_new_username"); while (keep_asking) { keep_asking = FALSE; add = FALSE; response = gtk_dialog_run (GTK_DIALOG (dlg)); switch (response) { case GTK_RESPONSE_OK: entry = UW("nuser_entry_username"); user = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); user_vlocale = string_to_vuser_locale (user); /* We care for the *number of bytes* not the number of characters (in case of UTF-8 multibyte chars) */ len = strlen (user_vlocale); g_free (user_vlocale); entry = UW("nuser_entry_pw1"); pw = (gchar *) gtk_entry_get_text (GTK_ENTRY (entry)); encrypted = g_strdup (misc_crypt_passwd (pw)); add = TRUE; if (len > 32) { response2 = gui_display_confirmdialog (_("Long Username"), _("The username you have entered contains more than 32 characters. " "This is normally the max length on a standard PureFTPd server. " "Do you wish to continue with this username anyway?"), _("Yes, Use this username "), NULL, UW("usermanager")); if (response2 == GTK_RESPONSE_NO) keep_asking = TRUE; } else if (usr_user_exists (user)) { gui_display_msgdialog (_("User already exists"), _("The username you have entered already exists in PureFTPd. " "You must select a different name for your new login."), MSGDLG_TYPE_ERROR, dlg); keep_asking = TRUE; } break; case GTK_RESPONSE_CANCEL: pur_log_dbg ("Aborting creation!\n"); break; } } gtk_entry_set_text (GTK_ENTRY (UW("nuser_entry_username")), ""); gtk_entry_set_text (GTK_ENTRY (UW("nuser_entry_pw1")), ""); gtk_entry_set_text (GTK_ENTRY (UW("nuser_entry_pw2")), ""); gtk_widget_hide (dlg); if (!add) return; if (usr_add_user (user, encrypted, &err)) { usr_fill_users_list (); usr_select_user (user); return; } else pur_log_err ("Error adding user: %s", err->message); switch (err->code) { case PA_USR_ERROR_PERMISSION_DENIED: gui_display_msgdialog (_("Add User Failed"), _("Could not add the user because you have insufficient permissions to do so. This could be bacause some other process is accessing the required file(s)."), MSGDLG_TYPE_WARNING, dlg); break; case PA_USR_ERROR_COMMAND_NOT_FOUND: gui_display_msgdialog (_("Add User Failed"), _("The pure-pw command could not be found. Make sure that the command is installed and that the configuration points to the correct file.\n"), MSGDLG_TYPE_WARNING, dlg); break; } g_error_free (err); } void on_usr_dlg_btn_change_pw_clicked (GtkButton *button, gpointer user_data) { GtkWidget *dlg, *entry; const gchar *pw; gchar *encrypted; gint ret; dlg = UW("dlg_set_password"); ret = gtk_dialog_run (GTK_DIALOG (dlg)); if (ret == GTK_RESPONSE_OK) { entry = UW("pwset_entry_pw1"); pw = (gchar *) gtk_entry_get_text (GTK_ENTRY (entry)); encrypted = g_strdup (misc_crypt_passwd (pw)); g_free (g_object_get_data (G_OBJECT (button), "usr_password")); g_object_set_data (G_OBJECT (button), "usr_password", encrypted); } gtk_entry_set_text (GTK_ENTRY (UW("pwset_entry_pw1")), ""); gtk_entry_set_text (GTK_ENTRY (UW("pwset_entry_pw2")), ""); gtk_widget_hide (dlg); } void on_usr_dlg_chk_chroot_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget *entry; entry = UW("entry_fakeroot"); if (GTK_WIDGET_SENSITIVE (GTK_WIDGET (togglebutton)) == FALSE) return; /* Don't set sensitive state if togglebutton is insensitive */ gtk_widget_set_sensitive (entry, gtk_toggle_button_get_active (togglebutton)); } void on_usr_dlg_btn_cancel_changes_clicked (GtkButton *button, gpointer user_data) { GtkWidget *tree, *btn_remove, *btn_add, *btn_edit; tree = UW("tree_userlist"); btn_remove = UW("btn_removeuser"); btn_edit = UW("btn_edituser"); btn_add = UW("btn_adduser"); gtk_widget_set_sensitive (GTK_WIDGET (tree), TRUE); gtk_widget_set_sensitive (btn_remove, TRUE); gtk_widget_set_sensitive (btn_add, TRUE); gtk_widget_set_sensitive (btn_edit, TRUE); usr_widgets_set_active_state (FALSE); g_object_set_data (G_OBJECT (UW("usermanager")), "editing", GINT_TO_POINTER (FALSE)); g_signal_emit_by_name (G_OBJECT (tree), "cursor_changed", GTK_TREE_VIEW (tree), NULL); } void close_usrman_dialog (GtkButton *button, gpointer user_data) { gboolean editing; gint dlg_ret; GtkWidget *save_btn = UW("btn_save_changes"); editing = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (UW("usermanager")), "editing")); if (editing) { dlg_ret = gui_display_confirmdialog (_("You have unsaved info."), _("You are currently editing the information of an user.\n" "Do you wish to save this information first?"), _("Yes, _Save Info"), _("_Cancel"), UW("usermanager")); if (dlg_ret == GTK_RESPONSE_YES) g_signal_emit_by_name (G_OBJECT (save_btn), "clicked", GTK_BUTTON (save_btn), NULL); else return; } gtk_widget_hide (UW("usermanager")); } void on_usr_dlg_btn_help_clicked (GtkButton *button, gpointer user_data) { hlp_show_help (HLP_ITEM_USER_MANAGER); } gboolean on_usrman_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { GtkWidget *close_button = UW("btn_close"); if (!close_button) return TRUE; g_signal_emit_by_name (close_button, "clicked", close_button, NULL); return TRUE; } /* This is used from the add-new-user dialog */ void on_new_user_entry_change (GtkEditable *editable, gpointer data) { GtkWidget *entry_uname = NULL; GtkWidget *entry_pw1 = NULL; GtkWidget *entry_pw2 = NULL; GtkWidget *btn_add = NULL; const gchar *uname, *pw1, *pw2; entry_uname = UW("nuser_entry_username"); entry_pw1 = UW("nuser_entry_pw1"); entry_pw2 = UW("nuser_entry_pw2"); btn_add = UW("nuser_btn_add"); uname = gtk_entry_get_text (GTK_ENTRY (entry_uname)); pw1 = gtk_entry_get_text (GTK_ENTRY (entry_pw1)); pw2 = gtk_entry_get_text (GTK_ENTRY (entry_pw2)); if (G_UNLIKELY (strlen (uname) > 0 && strlen (pw1) > 0 && g_str_equal (pw1, pw2))) { gtk_widget_set_sensitive (btn_add, TRUE); GTK_WIDGET_SET_FLAGS (btn_add, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (btn_add, GTK_HAS_DEFAULT); } else gtk_widget_set_sensitive (btn_add, FALSE); } /* This is used in the dialog that changes the password for a user */ void on_pwentry_changed (GtkEditable *editable, gpointer user_data) { GtkWidget *pw1 = NULL; GtkWidget *pw2 = NULL; GtkWidget *btn = NULL; const gchar *txt1, *txt2; pw1 = UW("pwset_entry_pw1"); pw2 = UW("pwset_entry_pw2"); btn = UW("pwset_btn_set"); txt1 = gtk_entry_get_text (GTK_ENTRY (pw1)); txt2 = gtk_entry_get_text (GTK_ENTRY (pw2)); if (G_UNLIKELY (strlen (txt1) > 0 && g_str_equal (txt1, txt2))) gtk_widget_set_sensitive (btn, TRUE); else gtk_widget_set_sensitive (btn, FALSE); } void optmenu_id_changed (GtkOptionMenu *optionmenu, gpointer user_data) { static GtkWidget *lbl_gid = NULL, *lbl_uid = NULL; static GtkWidget *opt_menu_uid = NULL, *opt_menu_gid = NULL; if (!opt_menu_uid) { lbl_uid = UW("lbl_invalid_uid"); lbl_gid = UW("lbl_invalid_gid"); opt_menu_uid = UW("optmenu_uid"); opt_menu_gid = UW("optmenu_gid"); } if ((gpointer) optionmenu == (gpointer) opt_menu_uid) gtk_widget_hide (lbl_uid); else gtk_widget_hide (lbl_gid); } void on_btn_browse_homedir_clicked (GtkButton *button, gpointer user_data) { GtkWidget *dbr, *entry; const gchar *old; const gchar *dir; gint response; entry = UW("entry_home"); old = gtk_entry_get_text (GTK_ENTRY (entry)); dbr = dirbrowser_new (NULL); dirbrowser_set_directory (DIRBROWSER (dbr), old); response = gtk_dialog_run (GTK_DIALOG (dbr)); if (response == GTK_RESPONSE_OK) { dir = dirbrowser_get_directory (DIRBROWSER (dbr)); gtk_entry_set_text (GTK_ENTRY (entry), dir); } gtk_widget_destroy (dbr); } void on_btn_browse_fakeroot_clicked (GtkButton *button, gpointer user_data) { GtkWidget *dbr, *entry; const gchar *old; const gchar *dir; gint response; entry = UW("entry_fakeroot"); old = gtk_entry_get_text (GTK_ENTRY (entry)); dbr = dirbrowser_new (NULL); dirbrowser_set_directory (DIRBROWSER (dbr), old); response = gtk_dialog_run (GTK_DIALOG (dbr)); if (response == GTK_RESPONSE_OK) { dir = dirbrowser_get_directory (DIRBROWSER (dbr)); gtk_entry_set_text (GTK_ENTRY (entry), dir); } gtk_widget_destroy (dbr); } pureadmin-0.4/src/globals.h0000644000175000017500000000531510667602721012660 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Global variables * * Copyright (C) 2003 Isak Savo */ #ifndef __GLOBALS_H__ #define __GLOBALS_H__ #include #define FILEPATH_MAX 1024 #define DEF_PUREFTPD_PIDFILE "/var/run/pure-ftpd.pid" #ifndef LINE_MAX # define LINE_MAX 4096 #endif #ifndef G_LIKELY # define G_LIKELY(expr) (expr) #endif #ifndef G_UNLIKELY # define G_UNLIKELY(expr) (expr) #endif #ifndef G_MAXINT32 # define G_MAXINT32 ((gint32) 0x7fffffff) #endif extern gboolean debug; /* Set _CRITICAL since _ERR will terminate the program by glib */ #define pur_log_err(...) \ g_log (NULL, G_LOG_LEVEL_CRITICAL, __VA_ARGS__); #define pur_log_wrn(...) \ g_log (NULL, G_LOG_LEVEL_WARNING, __VA_ARGS__); #define pur_log_dbg(...) \ G_STMT_START { \ if (debug) \ g_log (NULL, G_LOG_LEVEL_DEBUG, __VA_ARGS__); \ } G_STMT_END #define pur_log_nfo(...) \ g_log (NULL, G_LOG_LEVEL_INFO, __VA_ARGS__); #define gpointer_diff(a,b) (gint) (GPOINTER_TO_INT(a) - GPOINTER_TO_INT(b)) /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # define Q_(String) g_strip_context ((String), gettext (String)) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define Q_(String) g_strip_context ((String), (String)) # define N_(String) (String) #endif typedef enum { RUNMODE_STOPPED = 0, /* Server is stopped */ RUNMODE_STANDALONE, /* Running in standalone mode */ RUNMODE_INETD /* Running through inetd or similar */ } ftp_runmode_t; ftp_runmode_t ftp_runmode; void exit_program (void); extern gchar *datadir; extern gchar *selfname; extern gchar *pixmapdir; extern gchar *docdir; #endif /* __GLOBALS_H__ */ pureadmin-0.4/src/dirbrowser.h0000644000175000017500000000524110667602721013415 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Dirbrowser-widget (similar to the file-selector distributet with GTK+). This is * in fact a stand-alone widget that easily can be used in other projects. Please give * me credit for it and leave the copyright-notice is untouched. Thx! * * Simply add dirbrowser.c and .h to you project and use the functions declared in the .h-file * to access the widget! * * Copyright (C) 2003 Isak Savo */ #ifndef __DIRBROWSER_H__ #define __DIRBROWSER_H__ #include #include #include G_BEGIN_DECLS /* Convinient macros for type-checking and -casting */ #define DIRBROWSER_TYPE (dirbrowser_get_type ()) #define DIRBROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DIRBROWSER_TYPE, Dirbrowser)) #define DIRBROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DIRBROWSER_TYPE, DirBrowserClass)) #define IS_DIRBROWSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DIRBROWSER_TYPE)) #define IS_DIRBROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DIRBROWSER_TYPE)) typedef struct _Dirbrowser Dirbrowser; typedef struct _DirbrowserClass DirbrowserClass; struct _Dirbrowser { /*< private >*/ GtkDialog parent_instance; /*< public >*/ GtkWidget *main_vbox; GtkWidget *btnbox; GtkWidget *btn_home; GtkWidget *location; GtkWidget *dir_tree; GtkWidget *btn_cancel; GtkWidget *btn_ok; gchar *str_directory; /*< private >*/ GtkWidget *scr_win; GdkPixbuf *icon; gulong hid_entry_changed, hid_cursor_changed; }; struct _DirbrowserClass { GtkDialogClass parent_class; }; /* Public functions, use these to access the widget */ GType dirbrowser_get_type (void); GtkWidget* dirbrowser_new (const gchar *title); void dirbrowser_set_directory (Dirbrowser *dir_browser, const char *path); G_CONST_RETURN gchar *dirbrowser_get_directory (Dirbrowser *dir_browser); G_END_DECLS #endif /* __DIRBROWSER_H__ */ pureadmin-0.4/src/suexec.h0000644000175000017500000000176010667602721012531 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Functions related to run a program as root * * Copyright (C) 2003-2004 Isak Savo */ #ifndef __SUEXEC_H__ #define __SUEXEC_H__ void suexec_shutdown (void); gboolean run_as_root (gchar **argv); #endif /* __SUEXEC_H__ */ pureadmin-0.4/src/Makefile.in0000644000175000017500000017123710670523037013134 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pureadmin$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_pureadmin_OBJECTS = pureadmin-main.$(OBJEXT) \ pureadmin-mainwin.$(OBJEXT) pureadmin-mainwin_cb.$(OBJEXT) \ pureadmin-usr_manager_cb.$(OBJEXT) \ pureadmin-srv_comm.$(OBJEXT) pureadmin-gui_helper.$(OBJEXT) \ pureadmin-usr_manager.$(OBJEXT) pureadmin-helper.$(OBJEXT) \ pureadmin-prefwin.$(OBJEXT) pureadmin-cfg.$(OBJEXT) \ pureadmin-logfile.$(OBJEXT) pureadmin-dirbrowser.$(OBJEXT) \ pureadmin-helpview.$(OBJEXT) pureadmin-famwrap.$(OBJEXT) \ pureadmin-debugging.$(OBJEXT) pureadmin-binreloc.$(OBJEXT) \ pureadmin-suexec.$(OBJEXT) pureadmin-purepw.$(OBJEXT) \ pureadmin-prereq_usrmanager.$(OBJEXT) \ pureadmin-system_accounts.$(OBJEXT) \ pureadmin-eggstatusicon.$(OBJEXT) \ pureadmin-eggmarshalers.$(OBJEXT) \ pureadmin-eggtrayicon.$(OBJEXT) pureadmin_OBJECTS = $(am_pureadmin_OBJECTS) am__DEPENDENCIES_1 = pureadmin_DEPENDENCIES = $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I. -I$(srcdir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(pureadmin_SOURCES) DIST_SOURCES = $(pureadmin_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_DEBUG = @ENABLE_DEBUG@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@ INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@ INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_ICONV = @INTLTOOL_ICONV@ INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@ INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@ INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@ INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@ INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@ INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@ INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@ INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@ INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@ INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@ INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@ INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@ INTLTOOL_XGETTEXT = @INTLTOOL_XGETTEXT@ INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@ INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CFLAGS = $(BINRELOC_CFLAGS) INCLUDES = \ -DPREFIX=\"@prefix@\" -DDATADIR=\"@datadir@\" -DBINDIR=\"@bindir@\" \ -DLOCALEDIR=\"@datadir@/locale\" @GTK_CFLAGS@ pureadmin_SOURCES = \ main.c globals.h \ mainwin.c mainwin.h \ mainwin_cb.c usr_manager_cb.c \ srv_comm.c srv_comm.h \ gui_helper.c gui_helper.h \ usr_manager.c usr_manager.h \ helper.c helper.h \ prefwin.c prefwin.h \ cfg.c cfg.h \ logfile.c logfile.h \ dirbrowser.c dirbrowser.h \ helpview.c helpview.h \ famwrap.c famwrap.h \ debugging.c debugging.h \ binreloc.c binreloc.h \ suexec.c suexec.h \ purepw.c purepw.h \ prereq_usrmanager.c prereq_usrmanager.h \ system_accounts.c system_accounts.h \ eggstatusicon.c eggstatusicon.h \ eggmarshalers.c eggmarshalers.h \ eggtrayicon.c eggtrayicon.h pureadmin_CFLAGS = -std=gnu99 -Wall pureadmin_LDFLAGS = -export-dynamic pureadmin_LDADD = @GTK_LIBS@ $(INTLLIBS) @BINRELOC_LIBS@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) pureadmin$(EXEEXT): $(pureadmin_OBJECTS) $(pureadmin_DEPENDENCIES) @rm -f pureadmin$(EXEEXT) $(LINK) $(pureadmin_LDFLAGS) $(pureadmin_OBJECTS) $(pureadmin_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-binreloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-cfg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-debugging.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-dirbrowser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-eggmarshalers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-eggstatusicon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-eggtrayicon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-famwrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-gui_helper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-helper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-helpview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-logfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-mainwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-mainwin_cb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-prefwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-prereq_usrmanager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-purepw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-srv_comm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-suexec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-system_accounts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-usr_manager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pureadmin-usr_manager_cb.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` pureadmin-main.o: main.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-main.o -MD -MP -MF "$(DEPDIR)/pureadmin-main.Tpo" -c -o pureadmin-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-main.Tpo" "$(DEPDIR)/pureadmin-main.Po"; else rm -f "$(DEPDIR)/pureadmin-main.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='pureadmin-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c pureadmin-main.obj: main.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-main.obj -MD -MP -MF "$(DEPDIR)/pureadmin-main.Tpo" -c -o pureadmin-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-main.Tpo" "$(DEPDIR)/pureadmin-main.Po"; else rm -f "$(DEPDIR)/pureadmin-main.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='pureadmin-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` pureadmin-mainwin.o: mainwin.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-mainwin.o -MD -MP -MF "$(DEPDIR)/pureadmin-mainwin.Tpo" -c -o pureadmin-mainwin.o `test -f 'mainwin.c' || echo '$(srcdir)/'`mainwin.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-mainwin.Tpo" "$(DEPDIR)/pureadmin-mainwin.Po"; else rm -f "$(DEPDIR)/pureadmin-mainwin.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mainwin.c' object='pureadmin-mainwin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-mainwin.o `test -f 'mainwin.c' || echo '$(srcdir)/'`mainwin.c pureadmin-mainwin.obj: mainwin.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-mainwin.obj -MD -MP -MF "$(DEPDIR)/pureadmin-mainwin.Tpo" -c -o pureadmin-mainwin.obj `if test -f 'mainwin.c'; then $(CYGPATH_W) 'mainwin.c'; else $(CYGPATH_W) '$(srcdir)/mainwin.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-mainwin.Tpo" "$(DEPDIR)/pureadmin-mainwin.Po"; else rm -f "$(DEPDIR)/pureadmin-mainwin.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mainwin.c' object='pureadmin-mainwin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-mainwin.obj `if test -f 'mainwin.c'; then $(CYGPATH_W) 'mainwin.c'; else $(CYGPATH_W) '$(srcdir)/mainwin.c'; fi` pureadmin-mainwin_cb.o: mainwin_cb.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-mainwin_cb.o -MD -MP -MF "$(DEPDIR)/pureadmin-mainwin_cb.Tpo" -c -o pureadmin-mainwin_cb.o `test -f 'mainwin_cb.c' || echo '$(srcdir)/'`mainwin_cb.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-mainwin_cb.Tpo" "$(DEPDIR)/pureadmin-mainwin_cb.Po"; else rm -f "$(DEPDIR)/pureadmin-mainwin_cb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mainwin_cb.c' object='pureadmin-mainwin_cb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-mainwin_cb.o `test -f 'mainwin_cb.c' || echo '$(srcdir)/'`mainwin_cb.c pureadmin-mainwin_cb.obj: mainwin_cb.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-mainwin_cb.obj -MD -MP -MF "$(DEPDIR)/pureadmin-mainwin_cb.Tpo" -c -o pureadmin-mainwin_cb.obj `if test -f 'mainwin_cb.c'; then $(CYGPATH_W) 'mainwin_cb.c'; else $(CYGPATH_W) '$(srcdir)/mainwin_cb.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-mainwin_cb.Tpo" "$(DEPDIR)/pureadmin-mainwin_cb.Po"; else rm -f "$(DEPDIR)/pureadmin-mainwin_cb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mainwin_cb.c' object='pureadmin-mainwin_cb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-mainwin_cb.obj `if test -f 'mainwin_cb.c'; then $(CYGPATH_W) 'mainwin_cb.c'; else $(CYGPATH_W) '$(srcdir)/mainwin_cb.c'; fi` pureadmin-usr_manager_cb.o: usr_manager_cb.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-usr_manager_cb.o -MD -MP -MF "$(DEPDIR)/pureadmin-usr_manager_cb.Tpo" -c -o pureadmin-usr_manager_cb.o `test -f 'usr_manager_cb.c' || echo '$(srcdir)/'`usr_manager_cb.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-usr_manager_cb.Tpo" "$(DEPDIR)/pureadmin-usr_manager_cb.Po"; else rm -f "$(DEPDIR)/pureadmin-usr_manager_cb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr_manager_cb.c' object='pureadmin-usr_manager_cb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-usr_manager_cb.o `test -f 'usr_manager_cb.c' || echo '$(srcdir)/'`usr_manager_cb.c pureadmin-usr_manager_cb.obj: usr_manager_cb.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-usr_manager_cb.obj -MD -MP -MF "$(DEPDIR)/pureadmin-usr_manager_cb.Tpo" -c -o pureadmin-usr_manager_cb.obj `if test -f 'usr_manager_cb.c'; then $(CYGPATH_W) 'usr_manager_cb.c'; else $(CYGPATH_W) '$(srcdir)/usr_manager_cb.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-usr_manager_cb.Tpo" "$(DEPDIR)/pureadmin-usr_manager_cb.Po"; else rm -f "$(DEPDIR)/pureadmin-usr_manager_cb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr_manager_cb.c' object='pureadmin-usr_manager_cb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-usr_manager_cb.obj `if test -f 'usr_manager_cb.c'; then $(CYGPATH_W) 'usr_manager_cb.c'; else $(CYGPATH_W) '$(srcdir)/usr_manager_cb.c'; fi` pureadmin-srv_comm.o: srv_comm.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-srv_comm.o -MD -MP -MF "$(DEPDIR)/pureadmin-srv_comm.Tpo" -c -o pureadmin-srv_comm.o `test -f 'srv_comm.c' || echo '$(srcdir)/'`srv_comm.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-srv_comm.Tpo" "$(DEPDIR)/pureadmin-srv_comm.Po"; else rm -f "$(DEPDIR)/pureadmin-srv_comm.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv_comm.c' object='pureadmin-srv_comm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-srv_comm.o `test -f 'srv_comm.c' || echo '$(srcdir)/'`srv_comm.c pureadmin-srv_comm.obj: srv_comm.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-srv_comm.obj -MD -MP -MF "$(DEPDIR)/pureadmin-srv_comm.Tpo" -c -o pureadmin-srv_comm.obj `if test -f 'srv_comm.c'; then $(CYGPATH_W) 'srv_comm.c'; else $(CYGPATH_W) '$(srcdir)/srv_comm.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-srv_comm.Tpo" "$(DEPDIR)/pureadmin-srv_comm.Po"; else rm -f "$(DEPDIR)/pureadmin-srv_comm.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv_comm.c' object='pureadmin-srv_comm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-srv_comm.obj `if test -f 'srv_comm.c'; then $(CYGPATH_W) 'srv_comm.c'; else $(CYGPATH_W) '$(srcdir)/srv_comm.c'; fi` pureadmin-gui_helper.o: gui_helper.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-gui_helper.o -MD -MP -MF "$(DEPDIR)/pureadmin-gui_helper.Tpo" -c -o pureadmin-gui_helper.o `test -f 'gui_helper.c' || echo '$(srcdir)/'`gui_helper.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-gui_helper.Tpo" "$(DEPDIR)/pureadmin-gui_helper.Po"; else rm -f "$(DEPDIR)/pureadmin-gui_helper.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gui_helper.c' object='pureadmin-gui_helper.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-gui_helper.o `test -f 'gui_helper.c' || echo '$(srcdir)/'`gui_helper.c pureadmin-gui_helper.obj: gui_helper.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-gui_helper.obj -MD -MP -MF "$(DEPDIR)/pureadmin-gui_helper.Tpo" -c -o pureadmin-gui_helper.obj `if test -f 'gui_helper.c'; then $(CYGPATH_W) 'gui_helper.c'; else $(CYGPATH_W) '$(srcdir)/gui_helper.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-gui_helper.Tpo" "$(DEPDIR)/pureadmin-gui_helper.Po"; else rm -f "$(DEPDIR)/pureadmin-gui_helper.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gui_helper.c' object='pureadmin-gui_helper.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-gui_helper.obj `if test -f 'gui_helper.c'; then $(CYGPATH_W) 'gui_helper.c'; else $(CYGPATH_W) '$(srcdir)/gui_helper.c'; fi` pureadmin-usr_manager.o: usr_manager.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-usr_manager.o -MD -MP -MF "$(DEPDIR)/pureadmin-usr_manager.Tpo" -c -o pureadmin-usr_manager.o `test -f 'usr_manager.c' || echo '$(srcdir)/'`usr_manager.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-usr_manager.Tpo" "$(DEPDIR)/pureadmin-usr_manager.Po"; else rm -f "$(DEPDIR)/pureadmin-usr_manager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr_manager.c' object='pureadmin-usr_manager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-usr_manager.o `test -f 'usr_manager.c' || echo '$(srcdir)/'`usr_manager.c pureadmin-usr_manager.obj: usr_manager.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-usr_manager.obj -MD -MP -MF "$(DEPDIR)/pureadmin-usr_manager.Tpo" -c -o pureadmin-usr_manager.obj `if test -f 'usr_manager.c'; then $(CYGPATH_W) 'usr_manager.c'; else $(CYGPATH_W) '$(srcdir)/usr_manager.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-usr_manager.Tpo" "$(DEPDIR)/pureadmin-usr_manager.Po"; else rm -f "$(DEPDIR)/pureadmin-usr_manager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr_manager.c' object='pureadmin-usr_manager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-usr_manager.obj `if test -f 'usr_manager.c'; then $(CYGPATH_W) 'usr_manager.c'; else $(CYGPATH_W) '$(srcdir)/usr_manager.c'; fi` pureadmin-helper.o: helper.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-helper.o -MD -MP -MF "$(DEPDIR)/pureadmin-helper.Tpo" -c -o pureadmin-helper.o `test -f 'helper.c' || echo '$(srcdir)/'`helper.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-helper.Tpo" "$(DEPDIR)/pureadmin-helper.Po"; else rm -f "$(DEPDIR)/pureadmin-helper.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='helper.c' object='pureadmin-helper.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-helper.o `test -f 'helper.c' || echo '$(srcdir)/'`helper.c pureadmin-helper.obj: helper.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-helper.obj -MD -MP -MF "$(DEPDIR)/pureadmin-helper.Tpo" -c -o pureadmin-helper.obj `if test -f 'helper.c'; then $(CYGPATH_W) 'helper.c'; else $(CYGPATH_W) '$(srcdir)/helper.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-helper.Tpo" "$(DEPDIR)/pureadmin-helper.Po"; else rm -f "$(DEPDIR)/pureadmin-helper.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='helper.c' object='pureadmin-helper.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-helper.obj `if test -f 'helper.c'; then $(CYGPATH_W) 'helper.c'; else $(CYGPATH_W) '$(srcdir)/helper.c'; fi` pureadmin-prefwin.o: prefwin.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-prefwin.o -MD -MP -MF "$(DEPDIR)/pureadmin-prefwin.Tpo" -c -o pureadmin-prefwin.o `test -f 'prefwin.c' || echo '$(srcdir)/'`prefwin.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-prefwin.Tpo" "$(DEPDIR)/pureadmin-prefwin.Po"; else rm -f "$(DEPDIR)/pureadmin-prefwin.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prefwin.c' object='pureadmin-prefwin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-prefwin.o `test -f 'prefwin.c' || echo '$(srcdir)/'`prefwin.c pureadmin-prefwin.obj: prefwin.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-prefwin.obj -MD -MP -MF "$(DEPDIR)/pureadmin-prefwin.Tpo" -c -o pureadmin-prefwin.obj `if test -f 'prefwin.c'; then $(CYGPATH_W) 'prefwin.c'; else $(CYGPATH_W) '$(srcdir)/prefwin.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-prefwin.Tpo" "$(DEPDIR)/pureadmin-prefwin.Po"; else rm -f "$(DEPDIR)/pureadmin-prefwin.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prefwin.c' object='pureadmin-prefwin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-prefwin.obj `if test -f 'prefwin.c'; then $(CYGPATH_W) 'prefwin.c'; else $(CYGPATH_W) '$(srcdir)/prefwin.c'; fi` pureadmin-cfg.o: cfg.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-cfg.o -MD -MP -MF "$(DEPDIR)/pureadmin-cfg.Tpo" -c -o pureadmin-cfg.o `test -f 'cfg.c' || echo '$(srcdir)/'`cfg.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-cfg.Tpo" "$(DEPDIR)/pureadmin-cfg.Po"; else rm -f "$(DEPDIR)/pureadmin-cfg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfg.c' object='pureadmin-cfg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-cfg.o `test -f 'cfg.c' || echo '$(srcdir)/'`cfg.c pureadmin-cfg.obj: cfg.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-cfg.obj -MD -MP -MF "$(DEPDIR)/pureadmin-cfg.Tpo" -c -o pureadmin-cfg.obj `if test -f 'cfg.c'; then $(CYGPATH_W) 'cfg.c'; else $(CYGPATH_W) '$(srcdir)/cfg.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-cfg.Tpo" "$(DEPDIR)/pureadmin-cfg.Po"; else rm -f "$(DEPDIR)/pureadmin-cfg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfg.c' object='pureadmin-cfg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-cfg.obj `if test -f 'cfg.c'; then $(CYGPATH_W) 'cfg.c'; else $(CYGPATH_W) '$(srcdir)/cfg.c'; fi` pureadmin-logfile.o: logfile.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-logfile.o -MD -MP -MF "$(DEPDIR)/pureadmin-logfile.Tpo" -c -o pureadmin-logfile.o `test -f 'logfile.c' || echo '$(srcdir)/'`logfile.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-logfile.Tpo" "$(DEPDIR)/pureadmin-logfile.Po"; else rm -f "$(DEPDIR)/pureadmin-logfile.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='logfile.c' object='pureadmin-logfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-logfile.o `test -f 'logfile.c' || echo '$(srcdir)/'`logfile.c pureadmin-logfile.obj: logfile.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-logfile.obj -MD -MP -MF "$(DEPDIR)/pureadmin-logfile.Tpo" -c -o pureadmin-logfile.obj `if test -f 'logfile.c'; then $(CYGPATH_W) 'logfile.c'; else $(CYGPATH_W) '$(srcdir)/logfile.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-logfile.Tpo" "$(DEPDIR)/pureadmin-logfile.Po"; else rm -f "$(DEPDIR)/pureadmin-logfile.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='logfile.c' object='pureadmin-logfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-logfile.obj `if test -f 'logfile.c'; then $(CYGPATH_W) 'logfile.c'; else $(CYGPATH_W) '$(srcdir)/logfile.c'; fi` pureadmin-dirbrowser.o: dirbrowser.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-dirbrowser.o -MD -MP -MF "$(DEPDIR)/pureadmin-dirbrowser.Tpo" -c -o pureadmin-dirbrowser.o `test -f 'dirbrowser.c' || echo '$(srcdir)/'`dirbrowser.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-dirbrowser.Tpo" "$(DEPDIR)/pureadmin-dirbrowser.Po"; else rm -f "$(DEPDIR)/pureadmin-dirbrowser.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dirbrowser.c' object='pureadmin-dirbrowser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-dirbrowser.o `test -f 'dirbrowser.c' || echo '$(srcdir)/'`dirbrowser.c pureadmin-dirbrowser.obj: dirbrowser.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-dirbrowser.obj -MD -MP -MF "$(DEPDIR)/pureadmin-dirbrowser.Tpo" -c -o pureadmin-dirbrowser.obj `if test -f 'dirbrowser.c'; then $(CYGPATH_W) 'dirbrowser.c'; else $(CYGPATH_W) '$(srcdir)/dirbrowser.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-dirbrowser.Tpo" "$(DEPDIR)/pureadmin-dirbrowser.Po"; else rm -f "$(DEPDIR)/pureadmin-dirbrowser.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dirbrowser.c' object='pureadmin-dirbrowser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-dirbrowser.obj `if test -f 'dirbrowser.c'; then $(CYGPATH_W) 'dirbrowser.c'; else $(CYGPATH_W) '$(srcdir)/dirbrowser.c'; fi` pureadmin-helpview.o: helpview.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-helpview.o -MD -MP -MF "$(DEPDIR)/pureadmin-helpview.Tpo" -c -o pureadmin-helpview.o `test -f 'helpview.c' || echo '$(srcdir)/'`helpview.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-helpview.Tpo" "$(DEPDIR)/pureadmin-helpview.Po"; else rm -f "$(DEPDIR)/pureadmin-helpview.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='helpview.c' object='pureadmin-helpview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-helpview.o `test -f 'helpview.c' || echo '$(srcdir)/'`helpview.c pureadmin-helpview.obj: helpview.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-helpview.obj -MD -MP -MF "$(DEPDIR)/pureadmin-helpview.Tpo" -c -o pureadmin-helpview.obj `if test -f 'helpview.c'; then $(CYGPATH_W) 'helpview.c'; else $(CYGPATH_W) '$(srcdir)/helpview.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-helpview.Tpo" "$(DEPDIR)/pureadmin-helpview.Po"; else rm -f "$(DEPDIR)/pureadmin-helpview.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='helpview.c' object='pureadmin-helpview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-helpview.obj `if test -f 'helpview.c'; then $(CYGPATH_W) 'helpview.c'; else $(CYGPATH_W) '$(srcdir)/helpview.c'; fi` pureadmin-famwrap.o: famwrap.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-famwrap.o -MD -MP -MF "$(DEPDIR)/pureadmin-famwrap.Tpo" -c -o pureadmin-famwrap.o `test -f 'famwrap.c' || echo '$(srcdir)/'`famwrap.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-famwrap.Tpo" "$(DEPDIR)/pureadmin-famwrap.Po"; else rm -f "$(DEPDIR)/pureadmin-famwrap.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='famwrap.c' object='pureadmin-famwrap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-famwrap.o `test -f 'famwrap.c' || echo '$(srcdir)/'`famwrap.c pureadmin-famwrap.obj: famwrap.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-famwrap.obj -MD -MP -MF "$(DEPDIR)/pureadmin-famwrap.Tpo" -c -o pureadmin-famwrap.obj `if test -f 'famwrap.c'; then $(CYGPATH_W) 'famwrap.c'; else $(CYGPATH_W) '$(srcdir)/famwrap.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-famwrap.Tpo" "$(DEPDIR)/pureadmin-famwrap.Po"; else rm -f "$(DEPDIR)/pureadmin-famwrap.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='famwrap.c' object='pureadmin-famwrap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-famwrap.obj `if test -f 'famwrap.c'; then $(CYGPATH_W) 'famwrap.c'; else $(CYGPATH_W) '$(srcdir)/famwrap.c'; fi` pureadmin-debugging.o: debugging.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-debugging.o -MD -MP -MF "$(DEPDIR)/pureadmin-debugging.Tpo" -c -o pureadmin-debugging.o `test -f 'debugging.c' || echo '$(srcdir)/'`debugging.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-debugging.Tpo" "$(DEPDIR)/pureadmin-debugging.Po"; else rm -f "$(DEPDIR)/pureadmin-debugging.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='debugging.c' object='pureadmin-debugging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-debugging.o `test -f 'debugging.c' || echo '$(srcdir)/'`debugging.c pureadmin-debugging.obj: debugging.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-debugging.obj -MD -MP -MF "$(DEPDIR)/pureadmin-debugging.Tpo" -c -o pureadmin-debugging.obj `if test -f 'debugging.c'; then $(CYGPATH_W) 'debugging.c'; else $(CYGPATH_W) '$(srcdir)/debugging.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-debugging.Tpo" "$(DEPDIR)/pureadmin-debugging.Po"; else rm -f "$(DEPDIR)/pureadmin-debugging.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='debugging.c' object='pureadmin-debugging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-debugging.obj `if test -f 'debugging.c'; then $(CYGPATH_W) 'debugging.c'; else $(CYGPATH_W) '$(srcdir)/debugging.c'; fi` pureadmin-binreloc.o: binreloc.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-binreloc.o -MD -MP -MF "$(DEPDIR)/pureadmin-binreloc.Tpo" -c -o pureadmin-binreloc.o `test -f 'binreloc.c' || echo '$(srcdir)/'`binreloc.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-binreloc.Tpo" "$(DEPDIR)/pureadmin-binreloc.Po"; else rm -f "$(DEPDIR)/pureadmin-binreloc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='binreloc.c' object='pureadmin-binreloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-binreloc.o `test -f 'binreloc.c' || echo '$(srcdir)/'`binreloc.c pureadmin-binreloc.obj: binreloc.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-binreloc.obj -MD -MP -MF "$(DEPDIR)/pureadmin-binreloc.Tpo" -c -o pureadmin-binreloc.obj `if test -f 'binreloc.c'; then $(CYGPATH_W) 'binreloc.c'; else $(CYGPATH_W) '$(srcdir)/binreloc.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-binreloc.Tpo" "$(DEPDIR)/pureadmin-binreloc.Po"; else rm -f "$(DEPDIR)/pureadmin-binreloc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='binreloc.c' object='pureadmin-binreloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-binreloc.obj `if test -f 'binreloc.c'; then $(CYGPATH_W) 'binreloc.c'; else $(CYGPATH_W) '$(srcdir)/binreloc.c'; fi` pureadmin-suexec.o: suexec.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-suexec.o -MD -MP -MF "$(DEPDIR)/pureadmin-suexec.Tpo" -c -o pureadmin-suexec.o `test -f 'suexec.c' || echo '$(srcdir)/'`suexec.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-suexec.Tpo" "$(DEPDIR)/pureadmin-suexec.Po"; else rm -f "$(DEPDIR)/pureadmin-suexec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='suexec.c' object='pureadmin-suexec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-suexec.o `test -f 'suexec.c' || echo '$(srcdir)/'`suexec.c pureadmin-suexec.obj: suexec.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-suexec.obj -MD -MP -MF "$(DEPDIR)/pureadmin-suexec.Tpo" -c -o pureadmin-suexec.obj `if test -f 'suexec.c'; then $(CYGPATH_W) 'suexec.c'; else $(CYGPATH_W) '$(srcdir)/suexec.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-suexec.Tpo" "$(DEPDIR)/pureadmin-suexec.Po"; else rm -f "$(DEPDIR)/pureadmin-suexec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='suexec.c' object='pureadmin-suexec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-suexec.obj `if test -f 'suexec.c'; then $(CYGPATH_W) 'suexec.c'; else $(CYGPATH_W) '$(srcdir)/suexec.c'; fi` pureadmin-purepw.o: purepw.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-purepw.o -MD -MP -MF "$(DEPDIR)/pureadmin-purepw.Tpo" -c -o pureadmin-purepw.o `test -f 'purepw.c' || echo '$(srcdir)/'`purepw.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-purepw.Tpo" "$(DEPDIR)/pureadmin-purepw.Po"; else rm -f "$(DEPDIR)/pureadmin-purepw.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='purepw.c' object='pureadmin-purepw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-purepw.o `test -f 'purepw.c' || echo '$(srcdir)/'`purepw.c pureadmin-purepw.obj: purepw.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-purepw.obj -MD -MP -MF "$(DEPDIR)/pureadmin-purepw.Tpo" -c -o pureadmin-purepw.obj `if test -f 'purepw.c'; then $(CYGPATH_W) 'purepw.c'; else $(CYGPATH_W) '$(srcdir)/purepw.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-purepw.Tpo" "$(DEPDIR)/pureadmin-purepw.Po"; else rm -f "$(DEPDIR)/pureadmin-purepw.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='purepw.c' object='pureadmin-purepw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-purepw.obj `if test -f 'purepw.c'; then $(CYGPATH_W) 'purepw.c'; else $(CYGPATH_W) '$(srcdir)/purepw.c'; fi` pureadmin-prereq_usrmanager.o: prereq_usrmanager.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-prereq_usrmanager.o -MD -MP -MF "$(DEPDIR)/pureadmin-prereq_usrmanager.Tpo" -c -o pureadmin-prereq_usrmanager.o `test -f 'prereq_usrmanager.c' || echo '$(srcdir)/'`prereq_usrmanager.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-prereq_usrmanager.Tpo" "$(DEPDIR)/pureadmin-prereq_usrmanager.Po"; else rm -f "$(DEPDIR)/pureadmin-prereq_usrmanager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prereq_usrmanager.c' object='pureadmin-prereq_usrmanager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-prereq_usrmanager.o `test -f 'prereq_usrmanager.c' || echo '$(srcdir)/'`prereq_usrmanager.c pureadmin-prereq_usrmanager.obj: prereq_usrmanager.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-prereq_usrmanager.obj -MD -MP -MF "$(DEPDIR)/pureadmin-prereq_usrmanager.Tpo" -c -o pureadmin-prereq_usrmanager.obj `if test -f 'prereq_usrmanager.c'; then $(CYGPATH_W) 'prereq_usrmanager.c'; else $(CYGPATH_W) '$(srcdir)/prereq_usrmanager.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-prereq_usrmanager.Tpo" "$(DEPDIR)/pureadmin-prereq_usrmanager.Po"; else rm -f "$(DEPDIR)/pureadmin-prereq_usrmanager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prereq_usrmanager.c' object='pureadmin-prereq_usrmanager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-prereq_usrmanager.obj `if test -f 'prereq_usrmanager.c'; then $(CYGPATH_W) 'prereq_usrmanager.c'; else $(CYGPATH_W) '$(srcdir)/prereq_usrmanager.c'; fi` pureadmin-system_accounts.o: system_accounts.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-system_accounts.o -MD -MP -MF "$(DEPDIR)/pureadmin-system_accounts.Tpo" -c -o pureadmin-system_accounts.o `test -f 'system_accounts.c' || echo '$(srcdir)/'`system_accounts.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-system_accounts.Tpo" "$(DEPDIR)/pureadmin-system_accounts.Po"; else rm -f "$(DEPDIR)/pureadmin-system_accounts.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='system_accounts.c' object='pureadmin-system_accounts.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-system_accounts.o `test -f 'system_accounts.c' || echo '$(srcdir)/'`system_accounts.c pureadmin-system_accounts.obj: system_accounts.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-system_accounts.obj -MD -MP -MF "$(DEPDIR)/pureadmin-system_accounts.Tpo" -c -o pureadmin-system_accounts.obj `if test -f 'system_accounts.c'; then $(CYGPATH_W) 'system_accounts.c'; else $(CYGPATH_W) '$(srcdir)/system_accounts.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-system_accounts.Tpo" "$(DEPDIR)/pureadmin-system_accounts.Po"; else rm -f "$(DEPDIR)/pureadmin-system_accounts.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='system_accounts.c' object='pureadmin-system_accounts.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-system_accounts.obj `if test -f 'system_accounts.c'; then $(CYGPATH_W) 'system_accounts.c'; else $(CYGPATH_W) '$(srcdir)/system_accounts.c'; fi` pureadmin-eggstatusicon.o: eggstatusicon.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-eggstatusicon.o -MD -MP -MF "$(DEPDIR)/pureadmin-eggstatusicon.Tpo" -c -o pureadmin-eggstatusicon.o `test -f 'eggstatusicon.c' || echo '$(srcdir)/'`eggstatusicon.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-eggstatusicon.Tpo" "$(DEPDIR)/pureadmin-eggstatusicon.Po"; else rm -f "$(DEPDIR)/pureadmin-eggstatusicon.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggstatusicon.c' object='pureadmin-eggstatusicon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-eggstatusicon.o `test -f 'eggstatusicon.c' || echo '$(srcdir)/'`eggstatusicon.c pureadmin-eggstatusicon.obj: eggstatusicon.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-eggstatusicon.obj -MD -MP -MF "$(DEPDIR)/pureadmin-eggstatusicon.Tpo" -c -o pureadmin-eggstatusicon.obj `if test -f 'eggstatusicon.c'; then $(CYGPATH_W) 'eggstatusicon.c'; else $(CYGPATH_W) '$(srcdir)/eggstatusicon.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-eggstatusicon.Tpo" "$(DEPDIR)/pureadmin-eggstatusicon.Po"; else rm -f "$(DEPDIR)/pureadmin-eggstatusicon.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggstatusicon.c' object='pureadmin-eggstatusicon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-eggstatusicon.obj `if test -f 'eggstatusicon.c'; then $(CYGPATH_W) 'eggstatusicon.c'; else $(CYGPATH_W) '$(srcdir)/eggstatusicon.c'; fi` pureadmin-eggmarshalers.o: eggmarshalers.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-eggmarshalers.o -MD -MP -MF "$(DEPDIR)/pureadmin-eggmarshalers.Tpo" -c -o pureadmin-eggmarshalers.o `test -f 'eggmarshalers.c' || echo '$(srcdir)/'`eggmarshalers.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-eggmarshalers.Tpo" "$(DEPDIR)/pureadmin-eggmarshalers.Po"; else rm -f "$(DEPDIR)/pureadmin-eggmarshalers.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggmarshalers.c' object='pureadmin-eggmarshalers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-eggmarshalers.o `test -f 'eggmarshalers.c' || echo '$(srcdir)/'`eggmarshalers.c pureadmin-eggmarshalers.obj: eggmarshalers.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-eggmarshalers.obj -MD -MP -MF "$(DEPDIR)/pureadmin-eggmarshalers.Tpo" -c -o pureadmin-eggmarshalers.obj `if test -f 'eggmarshalers.c'; then $(CYGPATH_W) 'eggmarshalers.c'; else $(CYGPATH_W) '$(srcdir)/eggmarshalers.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-eggmarshalers.Tpo" "$(DEPDIR)/pureadmin-eggmarshalers.Po"; else rm -f "$(DEPDIR)/pureadmin-eggmarshalers.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggmarshalers.c' object='pureadmin-eggmarshalers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-eggmarshalers.obj `if test -f 'eggmarshalers.c'; then $(CYGPATH_W) 'eggmarshalers.c'; else $(CYGPATH_W) '$(srcdir)/eggmarshalers.c'; fi` pureadmin-eggtrayicon.o: eggtrayicon.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-eggtrayicon.o -MD -MP -MF "$(DEPDIR)/pureadmin-eggtrayicon.Tpo" -c -o pureadmin-eggtrayicon.o `test -f 'eggtrayicon.c' || echo '$(srcdir)/'`eggtrayicon.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-eggtrayicon.Tpo" "$(DEPDIR)/pureadmin-eggtrayicon.Po"; else rm -f "$(DEPDIR)/pureadmin-eggtrayicon.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggtrayicon.c' object='pureadmin-eggtrayicon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-eggtrayicon.o `test -f 'eggtrayicon.c' || echo '$(srcdir)/'`eggtrayicon.c pureadmin-eggtrayicon.obj: eggtrayicon.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -MT pureadmin-eggtrayicon.obj -MD -MP -MF "$(DEPDIR)/pureadmin-eggtrayicon.Tpo" -c -o pureadmin-eggtrayicon.obj `if test -f 'eggtrayicon.c'; then $(CYGPATH_W) 'eggtrayicon.c'; else $(CYGPATH_W) '$(srcdir)/eggtrayicon.c'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pureadmin-eggtrayicon.Tpo" "$(DEPDIR)/pureadmin-eggtrayicon.Po"; else rm -f "$(DEPDIR)/pureadmin-eggtrayicon.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggtrayicon.c' object='pureadmin-eggtrayicon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pureadmin_CFLAGS) $(CFLAGS) -c -o pureadmin-eggtrayicon.obj `if test -f 'eggtrayicon.c'; then $(CYGPATH_W) 'eggtrayicon.c'; else $(CYGPATH_W) '$(srcdir)/eggtrayicon.c'; fi` uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pureadmin-0.4/src/usr_manager.c0000644000175000017500000005564310667602721013544 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Usermanager functions * * Copyright (C) 2003 Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "cfg.h" #include "gui_helper.h" #include "globals.h" #include "helper.h" #include "system_accounts.h" #include "usr_manager.h" #include "purepw.h" GladeXML *usrm_xml = NULL; typedef struct { GdkPixbuf *icon; gchar *login; gchar *realname; } PGuiUsermanRow; static GtkWidget *create_usermanager (void) { gchar *our_path; our_path = g_build_filename (datadir, PACKAGE, "usermanager.glade", NULL); usrm_xml = glade_xml_new (our_path, NULL, NULL); g_free (our_path); glade_xml_signal_autoconnect (usrm_xml); return UW("usermanager"); } static void free_usredit_struct (GtkWidget *dlg, gpointer data) { struct usrman_info_widgets **w = (struct usrman_info_widgets **) data; g_free (*w); *w = NULL; } static void free_pwstruct (PWInfo *i) { if (!i) return; g_free (i->login); g_free (i->pwd); g_free (i->home); g_free (i->gecos); g_free (i->allow_local_ip); g_free (i->deny_local_ip); g_free (i->allow_client_ip); g_free (i->deny_client_ip); g_free (i); } static struct usrman_info_widgets *get_widgets (void) { static struct usrman_info_widgets *ret = NULL; if (G_UNLIKELY (!ret)) { ret = g_new0 (struct usrman_info_widgets, 1); ret->login = UW("entry_username"); ret->realname = UW("entry_realname"); ret->e_uid = UW("optmenu_uid"); ret->e_gid = UW("optmenu_gid"); ret->chk_chroot = UW("chk_chroot"); ret->home = UW("entry_home"); ret->root = UW("entry_fakeroot"); ret->quota_files = UW("spin_maxfiles"); ret->quota_size = UW("spin_maxsize"); ret->timelimit = UW("entry_timerestrictions"); ret->simsess = UW("spin_simsessions"); ret->loc_allow = UW("entry_allowedlocalip"); ret->loc_deny = UW("entry_deniedlocalip"); ret->cli_allow = UW("entry_allowedclientip"); ret->cli_deny = UW("entry_deniedclientip"); ret->bw_ul = UW("spin_ulbwidth"); ret->bw_dl = UW("spin_dlbwidth"); ret->ul_ratio = UW("spin_ratioup"); ret->dl_ratio = UW("spin_ratiodown"); ret->btn_pwchange = UW("btn_change_pw"); ret->btn_savechanges = UW("btn_save_changes"); ret->btn_cancelchanges = UW("btn_cancel_changes"); ret->lbl_invalid_uid = UW("lbl_invalid_uid"); ret->lbl_invalid_gid = UW("lbl_invalid_gid"); ret->btn_browse_homedir = UW("btn_browse_homedir"); ret->btn_browse_fakeroot = UW("btn_browse_fakeroot"); g_signal_connect (G_OBJECT (UW("usermanager")), "destroy", G_CALLBACK (free_usredit_struct), &ret); } return ret; } /* Returns all information stored in the user information widgets */ static PWInfo *usr_widgets_get_info (void) { PWInfo *i; struct usrman_info_widgets *w; gchar *tmp, *t_home, *t_root; GList *items; gint sel; i = g_new0 (PWInfo, 1); w = get_widgets (); if (G_UNLIKELY (i == NULL || w == NULL)) return NULL; i->login = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->login))); i->gecos = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->realname))); i->pwd = g_strdup ((gchar *) g_object_get_data (G_OBJECT (w->btn_pwchange), "usr_password")); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w->chk_chroot))) { /* Chroot user */ i->chroot = TRUE; t_home = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->home))); t_root = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->root))); /* FIXME: Verify that this works for UTF-8 strings */ tmp = t_home + strlen (t_home) - 1; while (*tmp == '/') { *tmp = 0; tmp--; } tmp = t_root + strlen (t_root) - 1; while (*tmp == '/') { *tmp = 0; tmp--; } if (strlen (t_root) > strlen (t_home) || strncmp (t_home, t_root, strlen (t_root)) != 0) { pur_log_nfo ("Fake root error: %s not part of %s", t_root, t_home); i->home = g_strdup_printf ("%s/./", t_home); gtk_entry_set_text (GTK_ENTRY (w->root), t_home); /* The fake root that the user specified wasn't part of the home directory and thus invalid! */ gui_display_msgdialog (_("Invalid fake root"), _("The fake root you've selected is not a part of the homedirectory. The value has been defaulted to the users homedirectory."), MSGDLG_TYPE_WARNING, UW("usermanager")); } else if (strcmp (t_home, t_root) == 0) i->home = g_strdup_printf ("%s/./", t_home); else { tmp = t_home + strlen (t_root); *tmp = 0; tmp++; /* points to the remaining part of the home-dir */ i->home = g_strdup_printf ("%s/./%s", t_root, tmp); } g_free (t_home); g_free (t_root); } else { i->chroot = FALSE; i->home = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->home))); tmp = i->home + strlen (i->home) - 1; while (*tmp == '/') { *tmp = 0; tmp--; } } if (!g_path_is_absolute (i->home)) { /* Home directory *MUST* be an absolute path, starting with a '/' */ pur_log_wrn ("Invalid homedir: %s is not absolute!", i->home); gui_display_msgdialog (_("Invalid home directory"), _("The home directory you have specified is not an absolute path (i.e. not starting with a '/'). Information could not be saved"), MSGDLG_TYPE_ERROR, UW("usermanager")); free_pwstruct (i); return NULL; } /* UID / GID -- Needs conversion from menuitems to int */ SystemAccount *tmp_account; sel = gtk_option_menu_get_history (GTK_OPTION_MENU (w->e_uid)); items = g_object_get_data (G_OBJECT (w->e_uid), "items"); tmp_account = (SystemAccount*) g_list_nth (items, sel)->data; if (tmp_account) i->uid = tmp_account->id; sel = gtk_option_menu_get_history (GTK_OPTION_MENU (w->e_gid)); items = g_object_get_data (G_OBJECT (w->e_gid), "items"); tmp_account = (SystemAccount*) g_list_nth (items, sel)->data; if (tmp_account) i->gid = tmp_account->id; /* Time -- Needs conversion from char to ints */ tmp = (gchar *) gtk_entry_get_text (GTK_ENTRY (w->timelimit)); sscanf (tmp, "%u-%u", &(i->time_begin), &(i->time_end)); i->bw_dl = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->bw_dl)); i->bw_ul = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->bw_ul)); i->quota_files = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->quota_files)); i->quota_size = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->quota_size)); i->ul_ratio = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->ul_ratio)); i->dl_ratio = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->dl_ratio)); i->per_user_max = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (w->simsess)); i->allow_local_ip = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->loc_allow))); i->deny_local_ip = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->loc_deny))); i->allow_client_ip = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->cli_allow))); i->deny_client_ip = g_strdup (gtk_entry_get_text (GTK_ENTRY (w->cli_deny))); return i; } static void setup_optmenus (void) { GtkWidget *menu; GtkWidget *opt_menu; GList *IDs; opt_menu = UW("optmenu_uid"); IDs = sys_get_user_ids(); menu = gui_create_system_account_menu(IDs); gtk_option_menu_remove_menu (GTK_OPTION_MENU (opt_menu)); gtk_option_menu_set_menu (GTK_OPTION_MENU (opt_menu), menu); /* Keep the list attached to the menu for fast access in the callbacks */ g_object_set_data_full (G_OBJECT (opt_menu), "items", IDs, (GDestroyNotify) system_account_list_free); opt_menu = UW("optmenu_gid"); IDs = sys_get_group_ids(); menu = gui_create_system_account_menu(IDs); gtk_option_menu_remove_menu (GTK_OPTION_MENU (opt_menu)); gtk_option_menu_set_menu (GTK_OPTION_MENU (opt_menu), menu); g_object_set_data_full (G_OBJECT (opt_menu), "items", IDs, (GDestroyNotify) system_account_list_free); g_object_set_data (G_OBJECT (UW("usermanager")), "editing", GINT_TO_POINTER (FALSE)); } static void setup_treeview (void) { GtkTreeView *tree; GtkListStore *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; const gchar *titles[N_USRMAN_COLUMNS] = { "", _("Username"), _("Real Name") }; /* Set-up treeview */ tree = GTK_TREE_VIEW (UW("tree_userlist")); model = gtk_list_store_new (N_USRMAN_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (tree), GTK_TREE_MODEL (model)); g_object_unref (G_OBJECT (model)); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)), GTK_SELECTION_SINGLE); renderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "pixbuf", COL_USRMAN_ICON, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (titles[1], renderer, "text", COL_USRMAN_LOGIN, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (titles[2], renderer, "text", COL_USRMAN_REALNAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); } static void select_first_user (void) { static GtkWidget *tree_userman = NULL; static GtkTreeSelection *sel = NULL; GtkTreePath *path; if (!tree_userman) { tree_userman = UW("tree_userlist"); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_userman)); } path = gtk_tree_path_new_from_string ("0"); /* First item */ gtk_tree_selection_select_path (sel, path); gtk_tree_path_free (path); g_signal_emit_by_name ((gpointer) tree_userman, "cursor_changed", tree_userman, NULL); } static void add_to_users_list (PGuiUsermanRow line) { GtkTreeIter iter; static GtkWidget *tree = NULL; static GtkTreeModel *model = NULL; if (!tree) { tree = UW("tree_userlist"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree)); } gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_USRMAN_ICON, line.icon, COL_USRMAN_LOGIN, line.login, COL_USRMAN_REALNAME, line.realname, -1); } static void clear_users_list (void) { static GtkWidget *tree_userman = NULL; static GtkTreeModel *model = NULL; if (!tree_userman) { tree_userman = UW("tree_userlist"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_userman)); } gtk_list_store_clear (GTK_LIST_STORE (model)); } /* Case insensitive compare between two (PAvailableUser) users */ static gint userlist_compare_available_users (gconstpointer p1, gconstpointer p2) { PAvailableUser *u1, *u2; gchar *s1, *s2; gint rv; u1 = (PAvailableUser *) p1; u2 = (PAvailableUser *) p2; s1 = g_utf8_collate_key (u1->login, -1); s2 = g_utf8_collate_key (u2->login, -1); rv = strcmp (s1, s2); g_free (s1); g_free (s2); return rv; } /** GLOBAL FUNCTIONS **/ void usr_select_user (const gchar *user) { static GtkWidget *tree_userman = NULL; static GtkTreeModel *model = NULL; static GtkTreeSelection *sel = NULL; GtkTreeIter iter; gboolean more, found = FALSE; gchar *fetched_user; if (!tree_userman) { tree_userman = UW("tree_userlist"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_userman)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_userman)); } more = gtk_tree_model_get_iter_first (model, &iter); while (more) { gtk_tree_model_get (model, &iter, COL_USR_USER, &fetched_user, -1); if (g_str_equal (fetched_user, user)) { found = TRUE; break; } more = gtk_tree_model_iter_next (model, &iter); } if (found) { gtk_tree_selection_select_iter (sel, &iter); g_signal_emit_by_name ((gpointer) tree_userman, "cursor-changed", tree_userman, NULL); } } gint usr_fill_users_list (void) { GList *user_list = NULL, *node; gint ret = 0; static GdkPixbuf *icon_usr = NULL; PGuiUsermanRow line; PAvailableUser *usr; if (!icon_usr) icon_usr = create_pixbuf ("user.png"); clear_users_list (); user_list = usr_get_available_users (NULL); user_list = g_list_sort (user_list, (GCompareFunc) userlist_compare_available_users); node = user_list; line.icon = icon_usr; while (node) { ret++; usr = (PAvailableUser *) node->data; line.login = usr->login; line.realname = usr->realname; add_to_users_list (line); g_free (line.login); g_free (line.realname); g_free (node->data); node = g_list_next (node); } g_list_free (user_list); return ret; } void usr_widgets_set_active_state (gboolean active) { struct usrman_info_widgets *w; w = get_widgets (); // gtk_widget_set_sensitive (w->login, active); gtk_widget_set_sensitive (w->realname, active); gtk_widget_set_sensitive (w->e_uid, active); gtk_widget_set_sensitive (w->e_gid, active); gtk_widget_set_sensitive (w->chk_chroot, active); gtk_widget_set_sensitive (w->home, active); if (active && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w->chk_chroot))) gtk_widget_set_sensitive (w->root, active); else if (!active) gtk_widget_set_sensitive (w->root, FALSE); gtk_widget_set_sensitive (w->quota_files, active); gtk_widget_set_sensitive (w->quota_size, active); gtk_widget_set_sensitive (w->timelimit, active); gtk_widget_set_sensitive (w->simsess, active); gtk_widget_set_sensitive (w->loc_allow, active); gtk_widget_set_sensitive (w->loc_deny, active); gtk_widget_set_sensitive (w->cli_allow, active); gtk_widget_set_sensitive (w->cli_deny, active); gtk_widget_set_sensitive (w->bw_ul, active); gtk_widget_set_sensitive (w->bw_dl, active); gtk_widget_set_sensitive (w->ul_ratio, active); gtk_widget_set_sensitive (w->dl_ratio, active); gtk_widget_set_sensitive (w->btn_pwchange, active); gtk_widget_set_sensitive (w->btn_savechanges, active); gtk_widget_set_sensitive (w->btn_cancelchanges, active); gtk_widget_set_sensitive (w->btn_browse_homedir, active); gtk_widget_set_sensitive (w->btn_browse_fakeroot, active); } gboolean usr_widgets_set_info (gchar *user) { PWInfo *info; struct usrman_info_widgets *w; gchar *tmp, **t_arr; GtkWidget *menu; GList *items = NULL; gint i; gboolean found = FALSE; GError *err = NULL; info = pw_get_user_information (user, &err); if (G_UNLIKELY (!info)) { pur_log_wrn ("Error getting user information for %s: %s", user, err->message); g_error_free (err); return FALSE; } w = get_widgets (); gtk_entry_set_text (GTK_ENTRY (w->login), info->login); gtk_entry_set_text (GTK_ENTRY (w->realname), info->gecos); /* Hmm, this should be safe if g_object_get_data returns NULL upon failure */ g_free (g_object_get_data (G_OBJECT (w->btn_pwchange), "usr_password")); if (MISC_VALID_STRING (info->pwd)) g_object_set_data (G_OBJECT (w->btn_pwchange), "usr_password", g_strdup (info->pwd)); else g_object_set_data (G_OBJECT (w->btn_pwchange), "usr_password", NULL); t_arr = g_strsplit (info->home, "/./", 2); if (t_arr[1] != NULL) { /* User is chroot'ed */ if (t_arr[1]) tmp = g_strdup_printf ("%s/%s", t_arr[0], t_arr[1]); else tmp = g_strdup (t_arr[0]); gtk_entry_set_text (GTK_ENTRY (w->home), tmp); g_free (tmp); tmp = g_strdup (t_arr[0]); gtk_entry_set_text (GTK_ENTRY (w->root), tmp); g_free (tmp); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_chroot), TRUE); } else { /* No chroot */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_chroot), FALSE); gtk_entry_set_text (GTK_ENTRY (w->home), info->home); gtk_entry_set_text (GTK_ENTRY (w->root), ""); } g_strfreev (t_arr); tmp = g_strdup_printf ("%04u-%04u", info->time_begin, info->time_end); gtk_entry_set_text (GTK_ENTRY (w->timelimit), tmp); g_free (tmp); gtk_entry_set_text (GTK_ENTRY (w->loc_allow), info->allow_local_ip); gtk_entry_set_text (GTK_ENTRY (w->loc_deny), info->deny_local_ip); gtk_entry_set_text (GTK_ENTRY (w->cli_allow), info->allow_client_ip); gtk_entry_set_text (GTK_ENTRY (w->cli_deny), info->deny_client_ip); /* UID / GID */ menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (w->e_uid)); items = (GList *) g_object_get_data (G_OBJECT (w->e_uid), "items"); i = 0; found = FALSE; while (items) { if (info->uid == ((SystemAccount *) items->data)->id) { found = TRUE; break; } i++; items = g_list_next (items); } if (found) { gtk_option_menu_set_history (GTK_OPTION_MENU (w->e_uid), i); gtk_widget_hide (w->lbl_invalid_uid); } else { gtk_option_menu_set_history (GTK_OPTION_MENU (w->e_uid), 0); gtk_widget_show (w->lbl_invalid_uid); } menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (w->e_gid)); items = (GList *) g_object_get_data (G_OBJECT (w->e_gid), "items"); i = 0; found = FALSE; while (items) { if (info->gid == ((SystemAccount *) items->data)->id) { found = TRUE; break; } i++; items = g_list_next (items); } if (found) { gtk_option_menu_set_history (GTK_OPTION_MENU (w->e_gid), i); gtk_widget_hide (w->lbl_invalid_gid); } else { gtk_option_menu_set_history (GTK_OPTION_MENU (w->e_gid), 0); gtk_widget_show (w->lbl_invalid_gid); } gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->bw_ul), (gdouble) info->bw_ul); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->bw_dl), (gdouble) info->bw_dl); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->quota_files), (gdouble) info->quota_files); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->quota_size), (gdouble) info->quota_size); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->ul_ratio), (gdouble) info->ul_ratio); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->dl_ratio), (gdouble) info->dl_ratio); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w->simsess), (gdouble) info->per_user_max); free_pwstruct (info); return TRUE; } gboolean usr_user_exists (const gchar *user) { GError *err = NULL; if (!user || strlen (user) < 1) return FALSE; if (!pw_user_exists (user, &err)) { if (err) { pur_log_wrn ("Error checking for user %s: %s", user, err->message); g_error_free (err); } return FALSE; } return TRUE; } GtkWidget *usr_init_usermanager_window (GtkWidget *parent_window) { static GtkWidget *window = NULL; if (!window) { window = create_usermanager (); setup_treeview (); setup_optmenus (); } usr_fill_users_list (); select_first_user (); gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (parent_window)); return window; } #if FALSE gboolean usr_manager_check_prerequisites (void) { static gboolean first_time = TRUE; gboolean need_group, need_user, ret; gchar *str; gint val; if (first_time == FALSE) return TRUE; pur_log_dbg ("usr_manager: First time run!"); if (!g_file_test (cfg.pwfile, G_FILE_TEST_EXISTS)) { /* No password-files found */ ret = gui_display_confirmdialog (_("Create Password File?"), _("The file containing the login-names for virtual users could not be found. You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?"), _("_Yes, Create File"), NULL, MW("main_window")); if (ret == GTK_RESPONSE_YES) { if (misc_create_passwd_file () == FALSE) { /* Couldn't create password file. Report error to user */ str = g_strdup_printf (_("There was an error when trying to create password file [%s].\n" "The error reported was: '%s'"), cfg.pwfile, g_strerror (errno)); gui_display_msgdialog (_("File Creation Failed"), str, MSGDLG_TYPE_ERROR, MW("main_window")); return FALSE; } } else return FALSE; } else if ((val = access (cfg.pwfile, R_OK | W_OK)) != 0) { if (val == -1) pur_log_err ("access(%s, R_OK | W_OK) failed: %s", cfg.pwfile, g_strerror (errno)); /* We didn't have permission to read/write to the password file */ gui_display_msgdialog (_("Permission Denied"), _("You don't have permission to read and write to the password file." "This probably means that you have to run PureAdmin as root before beeing able to manage " "your users."), MSGDLG_TYPE_ERROR, MW("main_window")); return FALSE; } need_group = need_user = FALSE; /* Check if there exist a dedicated ftpgroup and ftpuser */ if (cfg.default_gid < 1) need_group = TRUE; if (cfg.default_uid < 1) need_user = TRUE; if (cfg.seen_usrdlg_welcome == FALSE && (need_user || need_group)) { GError *err = NULL; ret = gui_display_confirmdialog (_("Create User and Group"), _("It seems that you do not have a dedicated ftp-user and -group to use with the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for new users?"), _("_Yes, Create Account"), NULL, MW("main_window")); if (ret == GTK_RESPONSE_YES) { ret = misc_create_system_account (need_user, need_group, &err); if (!ret) { gui_display_msgdialog (_("Account Creation Failed"), _("PureAdmin was unable to create the system-accounts. You will have to create them manually. " "Use the appropriate tools for your distribution and read README.VirtualUsers distributed " "with the PureFTPd package."), MSGDLG_TYPE_ERROR, MW("main_window")); pur_log_err ("Error creating system accounts: %s", err->message); g_error_free (err); err = NULL; /* We want to show this dialog again, so we return here, before first_time is set to TRUE */ return FALSE; } } if (need_group) cfg.default_gid = cfg_find_ftpgroup_gid (); if (need_user) cfg.default_uid = cfg_find_ftpuser_uid (); cfg.seen_usrdlg_welcome = TRUE; } first_time = FALSE; return TRUE; } #endif gboolean usr_remove_user (const gchar *user, GError **err) { g_return_val_if_fail (err == NULL || *err == NULL, FALSE); return pw_remove_user (user, err); } /* Adds a user into the db. * arguments: * user: The user to add * passwd: The password for the user */ gboolean usr_add_user (const gchar *user, const gchar *passwd, GError **err) { g_return_val_if_fail (err == NULL || *err == NULL, FALSE); return pw_add_user (user, passwd, err); } gboolean usr_save_user_info (GError **err) { PWInfo *i; gint ret; g_return_val_if_fail (err == NULL || *err == NULL, FALSE); i = usr_widgets_get_info (); if (i == NULL || !MISC_VALID_STRING (i->login)) { pur_log_err ("Invalid information structure"); g_set_error (err, PUREADMIN_USERMANAGER_ERROR, PA_USR_ERROR_FAILED, "Couldn't get information from GUI"); return FALSE; } ret = pw_set_user_information (i, err); free_pwstruct (i); return ret; } GList *usr_get_available_users (GError **err) { g_return_val_if_fail (err == NULL || *err == NULL, NULL); return pw_get_available_users (err); } pureadmin-0.4/src/system_accounts.h0000644000175000017500000000356410667602721014464 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Misc functions used to handle system accounts * * Copyright (C) 2006 Isak Savo */ #ifndef __SYSTEM_ACCOUNTS_H__ #define __SYSTEM_ACCOUNTS_H__ #include /* Represents a system account (i.e. passwd or group entry) */ typedef struct { guint id; gchar *name; } SystemAccount; GList *sys_get_user_ids (void); GList *sys_get_group_ids (void); //GList *sys_get_user_ids_str (void); //GList *sys_get_group_ids_str (void); gboolean sys_get_uid_exists(guint uid); gboolean sys_get_gid_exists(guint gid); guint sys_get_available_user_id (guint min_id); guint sys_get_available_group_id (guint min_id); gboolean sys_create_user (const gchar *username, guint userid, guint groupid, GError **err); /* Creates a new group with the specified name and id. If 'groupid' is 0, the groupadd command will pick one instead. */ gboolean sys_create_group (const gchar *groupname, guint groupid, GError **err); /* Frees one SystemAccount object */ void system_account_free(SystemAccount *account); /* Frees a GList containing SystemAccount objects */ void system_account_list_free (GList *list); #endif /* __SYSTEM_ACCOUNTS_H__ */ pureadmin-0.4/src/Makefile.am0000644000175000017500000000201610667602721013113 00000000000000## Process this file with automake to produce Makefile.in ## AM_CPPFLAGS = $(BINRELOC_CFLAGS) AM_CFLAGS = $(BINRELOC_CFLAGS) INCLUDES = \ -DPREFIX=\"@prefix@\" -DDATADIR=\"@datadir@\" -DBINDIR=\"@bindir@\" \ -DLOCALEDIR=\"@datadir@/locale\" @GTK_CFLAGS@ bin_PROGRAMS = pureadmin pureadmin_SOURCES = \ main.c globals.h \ mainwin.c mainwin.h \ mainwin_cb.c usr_manager_cb.c \ srv_comm.c srv_comm.h \ gui_helper.c gui_helper.h \ usr_manager.c usr_manager.h \ helper.c helper.h \ prefwin.c prefwin.h \ cfg.c cfg.h \ logfile.c logfile.h \ dirbrowser.c dirbrowser.h \ helpview.c helpview.h \ famwrap.c famwrap.h \ debugging.c debugging.h \ binreloc.c binreloc.h \ suexec.c suexec.h \ purepw.c purepw.h \ prereq_usrmanager.c prereq_usrmanager.h \ system_accounts.c system_accounts.h \ eggstatusicon.c eggstatusicon.h \ eggmarshalers.c eggmarshalers.h \ eggtrayicon.c eggtrayicon.h pureadmin_CFLAGS = -std=gnu99 -Wall pureadmin_LDFLAGS = -export-dynamic pureadmin_LDADD = @GTK_LIBS@ $(INTLLIBS) @BINRELOC_LIBS@ pureadmin-0.4/src/eggmarshalers.h0000644000175000017500000001333310667602721014060 00000000000000 #ifndef ___egg_marshal_MARSHAL_H__ #define ___egg_marshal_MARSHAL_H__ #include G_BEGIN_DECLS /* VOID:OBJECT,OBJECT (eggmarshalers.list:1) */ extern void _egg_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,STRING,LONG,LONG (eggmarshalers.list:2) */ extern void _egg_marshal_VOID__OBJECT_STRING_LONG_LONG (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,LONG (eggmarshalers.list:3) */ extern void _egg_marshal_VOID__OBJECT_LONG (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,STRING,STRING (eggmarshalers.list:4) */ extern void _egg_marshal_VOID__OBJECT_STRING_STRING (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,UINT (eggmarshalers.list:5) */ extern void _egg_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* BOOLEAN:INT (eggmarshalers.list:6) */ extern void _egg_marshal_BOOLEAN__INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* BOOLEAN:ENUM (eggmarshalers.list:7) */ extern void _egg_marshal_BOOLEAN__ENUM (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* BOOLEAN:VOID (eggmarshalers.list:8) */ extern void _egg_marshal_BOOLEAN__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* OBJECT:VOID (eggmarshalers.list:9) */ extern void _egg_marshal_OBJECT__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:VOID (eggmarshalers.list:10) */ #define _egg_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID /* VOID:INT,INT (eggmarshalers.list:11) */ extern void _egg_marshal_VOID__INT_INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,UINT (eggmarshalers.list:12) */ /* VOID:BOOLEAN (eggmarshalers.list:13) */ #define _egg_marshal_VOID__BOOLEAN g_cclosure_marshal_VOID__BOOLEAN /* VOID:OBJECT,ENUM,BOXED (eggmarshalers.list:14) */ extern void _egg_marshal_VOID__OBJECT_ENUM_BOXED (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:BOXED (eggmarshalers.list:15) */ #define _egg_marshal_VOID__BOXED g_cclosure_marshal_VOID__BOXED G_END_DECLS #endif /* ___egg_marshal_MARSHAL_H__ */ pureadmin-0.4/src/famwrap.h0000644000175000017500000000231610667602721012670 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Wrapper functions for FAM (File Alteration Monitor). Used to monitor changes in files and directories. * * Copyright (C) 2003-2004 Isak Savo */ #ifndef __FAMWRAP_H__ #define __FAMWRAP_H__ gboolean fam_set_watch (const gchar *fname, void (*func)); gboolean fam_suspend_watch (void); gboolean fam_resume_watch (void); gboolean fam_delete_watch (void); gboolean fam_terminate (void); gboolean fam_is_running (void); #endif /* __FAMWRAP_H__ */ pureadmin-0.4/src/prefwin.c0000644000175000017500000005007010667602721012700 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Preferences management - the GUI-part. * * Copyright (C) 2003 - Isak Savo */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "cfg.h" #include "prefwin.h" #include "helper.h" #include "gui_helper.h" #include "logfile.h" #include "globals.h" #include "system_accounts.h" #include "dirbrowser.h" static void prefwin_menu_gid_changed (GtkOptionMenu *optionmenu, gpointer user_data); static void prefwin_menu_uid_changed (GtkOptionMenu *optionmenu, gpointer user_data); static void prefwin_rdo_toggled (GtkToggleButton *togglebutton, gpointer user_data); static void prefwin_entry_changed (GtkEditable *editable, gpointer user_data); static void prefwin_btn_search_clicked (GtkButton *button, gpointer user_data); static void prefwin_chkbtn_toggled (GtkToggleButton *togglebutton, gpointer user_data); static void prefwin_chkencoding_toggled (GtkToggleButton *togglebutton, gpointer user_data); static void prefwin_btn_browse_clicked (GtkButton *button, GtkWidget *entry); static void prefwin_btn_browse_home_clicked (GtkButton *button, gpointer user_data); static void prefwin_btn_encoding_sel_clicked (GtkButton *button, gpointer user_data); GladeXML *pref_xml = NULL; prefwin_widgets *prefwin_get_widgets (void) { static prefwin_widgets *w = NULL; if (G_UNLIKELY (!w)) { w = g_new0 (prefwin_widgets, 1); w->menu_uid = PW("opt_menu_uid"); w->menu_gid = PW("opt_menu_gid"); w->home = PW("entry_home"); w->cmd_purepw = PW("entry_purepw_cmd"); w->pwfile = PW("entry_passwd_file"); w->pdbfile = PW("entry_pdb_file"); w->encoding = PW("entry_encoding"); w->btn_search = PW("btn_search_set_defaults"); w->rdo_syslog = PW("rdo_syslog"); w->rdo_custom = PW("rdo_custom"); w->logfile = PW("entry_logfile"); w->chk_resolve = PW("chk_resolve_hostnames"); w->btn_home_browse = PW("btn_home_dir_browse"); w->btn_encoding_sel = PW("btn_encoding_sel"); w->chk_save_window_geo = PW("chk_save_window_geo"); w->chk_use_system_encoding = PW("chk_use_system_encoding"); w->chk_use_tray_icon = PW("chk_use_tray_icon"); w->chk_always_notify = PW("chk_always_notify"); w->btn_browse_purepw = PW("btn_browse_purepw"); w->btn_browse_pw = PW("btn_browse_pw"); w->btn_browse_pdb = PW("btn_browse_pdb"); } return w; } void prefwin_close (GtkWidget *w, gpointer data) { cfg_write_settings (); } static GtkWidget *create_prefwin (void) { gchar *our_path; our_path = g_build_filename (datadir, PACKAGE, "prefwin.glade", NULL); pref_xml = glade_xml_new (our_path, NULL, NULL); g_free (our_path); /* FIXME: autoconnect? */ return PW("preferences"); } GtkWidget *pref_init_prefwindow (GtkWidget *parent) { prefwin_widgets *w; GList *id; GtkWidget *menu; static GtkWidget *prefwin = NULL; gint i; if (!prefwin) prefwin = create_prefwin (); else return prefwin; w = prefwin_get_widgets (); /* GID/UID Option menus */ id = sys_get_user_ids (); menu = gui_create_system_account_menu(id); gtk_option_menu_remove_menu (GTK_OPTION_MENU (w->menu_uid)); gtk_option_menu_set_menu (GTK_OPTION_MENU (w->menu_uid), menu); /* Keep the list attached to the menu so that it's available in the callbacks.. */ g_object_set_data (G_OBJECT (w->menu_uid), "items", id); i = 0; while (id) { if (cfg.default_uid == ((SystemAccount*) id->data)->id) break; i++; id = g_list_next (id); } gtk_option_menu_set_history (GTK_OPTION_MENU (w->menu_uid), i); id = sys_get_group_ids (); menu = gui_create_system_account_menu(id); gtk_option_menu_remove_menu (GTK_OPTION_MENU (w->menu_gid)); gtk_option_menu_set_menu (GTK_OPTION_MENU (w->menu_gid), menu); g_object_set_data_full (G_OBJECT (w->menu_gid), "items", id, (GDestroyNotify) system_account_list_free); i = 0; while (id) { if (cfg.default_gid == ((SystemAccount*) id->data)->id) break; i++; id = g_list_next (id); } gtk_option_menu_set_history (GTK_OPTION_MENU (w->menu_gid), i); if (cfg.logmethod == LOG_SYSLOG) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->rdo_syslog), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->rdo_custom), TRUE); gtk_entry_set_text (GTK_ENTRY (w->home), cfg.default_home); gtk_entry_set_text (GTK_ENTRY (w->encoding), cfg.uname_encoding); gtk_entry_set_text (GTK_ENTRY (w->cmd_purepw), cfg.cmd_purepw); gtk_entry_set_text (GTK_ENTRY (w->pwfile), cfg.pwfile); gtk_entry_set_text (GTK_ENTRY (w->pdbfile), cfg.pdbfile); gtk_entry_set_text (GTK_ENTRY (w->logfile), cfg.logfile); /* Use these paths as a fallback for the fileselector */ g_object_set_data (G_OBJECT(w->cmd_purepw), "default_path", "/usr/bin/"); g_object_set_data (G_OBJECT(w->pwfile), "default_path", "/etc/"); g_object_set_data (G_OBJECT(w->pdbfile), "default_path", "/etc/"); /* Used to hint the file selector on the type of file we're selecting */ g_object_set_data (G_OBJECT(w->cmd_purepw), "whatfile", _("pure-pw executable")); g_object_set_data (G_OBJECT(w->pwfile), "whatfile", _("password file")); g_object_set_data (G_OBJECT(w->pdbfile), "whatfile", _("database file")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_resolve), cfg.resolve_hostnames); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_save_window_geo), cfg.save_window_geometry); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_use_tray_icon), cfg.use_tray_icon); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_always_notify), cfg.always_notify_activities); g_signal_connect ((gpointer) w->chk_use_system_encoding, "toggled", G_CALLBACK (prefwin_chkencoding_toggled), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w->chk_use_system_encoding), cfg.use_system_encoding); /* Hookup signals for the widgets to allow 'instant-apply' */ g_signal_connect ((gpointer) w->menu_uid, "changed", G_CALLBACK (prefwin_menu_uid_changed), NULL); g_signal_connect ((gpointer) w->menu_gid, "changed", G_CALLBACK (prefwin_menu_gid_changed), NULL); g_signal_connect ((gpointer) w->home, "changed", G_CALLBACK (prefwin_entry_changed), "home"); g_signal_connect ((gpointer) w->encoding, "changed", G_CALLBACK (prefwin_entry_changed), "encoding"); g_signal_connect ((gpointer) w->cmd_purepw, "changed", G_CALLBACK (prefwin_entry_changed), "cmd_purepw"); g_signal_connect ((gpointer) w->pwfile, "changed", G_CALLBACK (prefwin_entry_changed), "pwfile"); g_signal_connect ((gpointer) w->pdbfile, "changed", G_CALLBACK (prefwin_entry_changed), "pdbfile"); g_signal_connect ((gpointer) w->rdo_syslog, "toggled", G_CALLBACK (prefwin_rdo_toggled), GINT_TO_POINTER (LOG_SYSLOG)); g_signal_connect ((gpointer) w->rdo_custom, "toggled", G_CALLBACK (prefwin_rdo_toggled), GINT_TO_POINTER (LOG_CUSTOM)); g_signal_connect ((gpointer) w->logfile, "changed", G_CALLBACK (prefwin_entry_changed), "logfile"); g_signal_connect ((gpointer) w->chk_resolve, "toggled", G_CALLBACK (prefwin_chkbtn_toggled), "resolve"); g_signal_connect ((gpointer) w->chk_use_tray_icon, "toggled", G_CALLBACK (prefwin_chkbtn_toggled), "use_tray_icon"); g_signal_connect ((gpointer) w->chk_always_notify, "toggled", G_CALLBACK (prefwin_chkbtn_toggled), "always_notify_activities"); g_signal_connect ((gpointer) w->chk_save_window_geo, "toggled", G_CALLBACK (prefwin_chkbtn_toggled), "save_window"); /* Button Callbacks */ g_signal_connect ((gpointer) w->btn_search, "clicked", G_CALLBACK (prefwin_btn_search_clicked), NULL); g_signal_connect ((gpointer) w->btn_encoding_sel, "clicked", G_CALLBACK (prefwin_btn_encoding_sel_clicked), NULL); g_signal_connect ((gpointer) w->btn_home_browse, "clicked", G_CALLBACK (prefwin_btn_browse_home_clicked), NULL); g_signal_connect ((gpointer) w->btn_browse_purepw, "clicked", G_CALLBACK (prefwin_btn_browse_clicked), (gpointer) w->cmd_purepw); g_signal_connect ((gpointer) w->btn_browse_pw, "clicked", G_CALLBACK (prefwin_btn_browse_clicked), (gpointer) w->pwfile); g_signal_connect ((gpointer) w->btn_browse_pdb, "clicked", G_CALLBACK (prefwin_btn_browse_clicked), (gpointer) w->pdbfile); /* Signals for the prefwindow actual prefwindow */ g_signal_connect_swapped (G_OBJECT (PW("btn_prefwin_close")), "clicked", G_CALLBACK (gtk_widget_hide), (gpointer) prefwin); g_signal_connect (G_OBJECT (prefwin), "delete-event", G_CALLBACK (gtk_widget_hide), NULL); g_signal_connect (G_OBJECT (prefwin), "hide", G_CALLBACK (prefwin_close), NULL); gtk_window_set_transient_for (GTK_WINDOW (prefwin), GTK_WINDOW (parent)); return prefwin; } static void prefwin_menu_gid_changed (GtkOptionMenu *optionmenu, gpointer user_data) { GList *id; gint node_no; id = (GList *) g_object_get_data (G_OBJECT (optionmenu), "items"); node_no = gtk_option_menu_get_history (optionmenu); id = g_list_nth (id, node_no); if (!id) g_print ("Gid change: Wrong history: %d\n", node_no); } static void prefwin_menu_uid_changed (GtkOptionMenu *optionmenu, gpointer user_data) { GList *id; gint node_no; id = (GList *) g_object_get_data (G_OBJECT (optionmenu), "items"); node_no = gtk_option_menu_get_history (optionmenu); id = g_list_nth (id, node_no); if (!id) g_print ("Uid change: Wrong history: %d\n", node_no); } static void prefwin_rdo_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget *entry; if (!gtk_toggle_button_get_active (togglebutton)) return; entry = PW("entry_logfile"); cfg.logmethod = GPOINTER_TO_INT (user_data); switch (GPOINTER_TO_INT (user_data)) { case LOG_SYSLOG: /* Syslog selected */ gtk_entry_set_text (GTK_ENTRY (entry), "/var/log/messages"); break; case LOG_CUSTOM: /* Custom selected */ gtk_entry_set_text (GTK_ENTRY (entry), "/var/log/pureftpd.log"); break; } } static void prefwin_chkbtn_toggled (GtkToggleButton *togglebutton, gpointer user_data) { gchar *arg = (gchar *) user_data; gboolean toggled = gtk_toggle_button_get_active (togglebutton); if (g_str_equal (arg, "resolve")) cfg.resolve_hostnames = toggled; else if (g_str_equal (arg, "save_window")) cfg.save_window_geometry = toggled; else if (g_str_equal (arg, "use_tray_icon")) { if (!toggled) /* Remove it if it's shown */ hide_status_icon (); cfg.use_tray_icon = toggled; } else if (g_str_equal (arg, "always_notify_activities")) cfg.always_notify_activities = toggled; } static void prefwin_chkencoding_toggled (GtkToggleButton *togglebutton, gpointer user_data) { prefwin_widgets *w; gboolean active; w = prefwin_get_widgets (); active = gtk_toggle_button_get_active (togglebutton); cfg.use_system_encoding = active; gtk_widget_set_sensitive (w->encoding, !active); gtk_widget_set_sensitive (w->btn_encoding_sel, !active); } static void prefwin_entry_changed (GtkEditable *editable, gpointer user_data) { gchar *tmp; gchar *ename; ename = (gchar *) user_data; tmp = gtk_editable_get_chars (GTK_EDITABLE (editable), 0, -1); /* g_print ("Entry [%s] changed into: %s\n", ename, tmp); */ if (g_str_equal (ename, "home")) { g_free (cfg.default_home); cfg.default_home = tmp; } else if (g_str_equal (ename, "cmd_purepw")) { g_free (cfg.cmd_purepw); cfg.cmd_purepw = tmp; } else if (g_str_equal (ename, "pwfile")) { g_free (cfg.pwfile); cfg.pwfile = tmp; } else if (g_str_equal (ename, "pdbfile")) { g_free (cfg.pdbfile); cfg.pdbfile = tmp; } else if (g_str_equal(ename, "logfile")) { if (g_path_is_absolute (tmp) && g_file_test (tmp, G_FILE_TEST_IS_REGULAR)) { close_logfile (); g_free (cfg.logfile); cfg.logfile = tmp; init_logfile (); } else g_free (tmp); } else if (g_str_equal (ename, "encoding")) { g_free (cfg.uname_encoding); cfg.uname_encoding = tmp; } else g_free (tmp); } static void prefwin_btn_search_clicked (GtkButton *button, gpointer user_data) { gchar *tmp; prefwin_widgets *w; w = prefwin_get_widgets (); tmp = g_find_program_in_path ("pure-pw"); gtk_entry_set_text (GTK_ENTRY (w->cmd_purepw), tmp ? tmp : _("Not Found")); g_free (tmp); tmp = cfg_find_pwfile (); gtk_entry_set_text (GTK_ENTRY (w->pwfile), tmp ? tmp : _("Not Found")); g_free (tmp); tmp = cfg_find_pdbfile (); gtk_entry_set_text (GTK_ENTRY (w->pdbfile), tmp ? tmp : _("Not Found")); g_free (tmp); } static void store_filename (GtkWidget *widget, GtkWidget *fs) { GtkWidget *entry; const gchar *selected_filename; entry = (GtkWidget *) g_object_get_data (G_OBJECT (fs), "affected_entry"); selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); gtk_entry_set_text (GTK_ENTRY (entry), selected_filename); } static GtkWidget *create_fileselector (const gchar *title, const gchar *preselected) { GtkWidget *file_selector; file_selector = gtk_file_selection_new (title); g_signal_connect (GTK_FILE_SELECTION (file_selector)->ok_button, "clicked", G_CALLBACK (store_filename), file_selector); /* Ensure that the dialog box is destroyed when the user clicks a button. */ g_signal_connect_swapped (GTK_FILE_SELECTION (file_selector)->ok_button, "clicked", G_CALLBACK (gtk_widget_destroy), file_selector); g_signal_connect_swapped (GTK_FILE_SELECTION (file_selector)->cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), file_selector); gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_selector), preselected); gtk_window_set_transient_for (GTK_WINDOW (file_selector), GTK_WINDOW (PW("preferences"))); return file_selector; } static void prefwin_btn_browse_clicked (GtkButton *button, GtkWidget *entry) { prefwin_widgets *w; GtkWidget *fs; gchar *title; w = prefwin_get_widgets (); /* Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. * This is used as title for the file selector. */ title = g_strdup_printf (_("Please select %s"), (gchar *) g_object_get_data (G_OBJECT (entry), "whatfile")); if (strlen (gtk_entry_get_text (GTK_ENTRY (entry))) > 0) fs = create_fileselector (title, gtk_entry_get_text (GTK_ENTRY (entry))); else fs = create_fileselector (title, g_object_get_data (G_OBJECT(entry), "default_path")); g_object_set_data (G_OBJECT (fs), "affected_entry", (gpointer) entry); gtk_widget_show (fs); } static void prefwin_btn_browse_home_clicked (GtkButton *button, gpointer user_data) { prefwin_widgets *w; GtkWidget *dbr; const gchar *dir; gint response; w = prefwin_get_widgets (); dbr = dirbrowser_new (_("Select Default Home Directory")); if (g_file_test (cfg.default_home, G_FILE_TEST_IS_DIR)) dirbrowser_set_directory (DIRBROWSER (dbr), cfg.default_home); response = gtk_dialog_run (GTK_DIALOG (dbr)); if (response == GTK_RESPONSE_OK) { dir = dirbrowser_get_directory (DIRBROWSER (dbr)); gtk_entry_set_text (GTK_ENTRY (w->home), dir); } gtk_widget_destroy (dbr); } static void encoding_changed_cb (GtkTreeView *tree, gpointer user_data) { GtkEntry *entry = GTK_ENTRY (user_data); GtkTreeModel *model; GtkTreeSelection *sel; GtkTreeIter iter; gchar *encoding; g_print ("encoding changed\n"); sel = gtk_tree_view_get_selection (tree); model = gtk_tree_view_get_model (tree); if (gtk_tree_selection_get_selected (sel, &model, &iter)) { gtk_tree_model_get (model, &iter, 0, &encoding, -1); gtk_entry_set_text (entry, encoding); } return; } static GList * get_available_encodings (void) { GList *retval = NULL; #define BUFSIZE 256 gchar buf[BUFSIZE], *tmp; gchar *prgm, *full_prgm; FILE *p; if (!(prgm = g_find_program_in_path ("iconv"))) { pur_log_wrn ("Couldn't find the program \"iconv\". Unable to fetch list of encodings"); return NULL; } full_prgm = g_strdup_printf ("%s --list", prgm); g_free (prgm); if ((p = popen (full_prgm, "r")) == NULL) { pur_log_wrn ("popen %s: %s", full_prgm, strerror(errno)); return NULL; } g_free (full_prgm); while (fgets (buf, BUFSIZE, p)) { if (!strstr (buf, "//")) continue; tmp = buf; while (tmp){ if (*tmp == '/' && *(tmp +1) == '/') { *tmp = '\0'; break; } tmp++; } g_strstrip (buf); retval = g_list_append (retval, g_strdup (buf)); } pclose (p); return retval; } static void free_encoding_list (GtkWidget *w, gpointer list) { g_list_free ((GList *) list); } static void filter_encoding_list (GtkWidget *entry, gpointer data) { GtkTreeView *tree = GTK_TREE_VIEW (data); GtkTreeIter iter, iter_sel; GtkListStore *model; GList *list; gint handler_id; const gchar *filter_str, *encoding; gboolean sel = FALSE; filter_str = gtk_entry_get_text (GTK_ENTRY(entry)); handler_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree), "callback_handler_id")); list = g_object_get_data (G_OBJECT (tree), "encoding_list"); model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (tree))); g_signal_handler_block (G_OBJECT (tree), handler_id); gtk_list_store_clear (GTK_LIST_STORE (model)); while (list) { encoding = (const gchar *) list->data; if (misc_str_isearch (encoding, filter_str)) { gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, encoding, -1); if (g_str_equal (encoding, cfg.uname_encoding)) { memcpy (&iter_sel, &iter, sizeof (GtkTreeIter)); sel = TRUE; } } list = g_list_next (list); } if (sel) gui_select_treeview_row (&iter_sel, tree); g_signal_handler_unblock (G_OBJECT (tree), handler_id); return; } static void prefwin_btn_encoding_sel_clicked (GtkButton *button, gpointer user_data) { prefwin_widgets *w; static GtkWidget *dlg = NULL; GList *list, *head; GtkListStore *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeIter iter, iter_sel; GtkTreeView *tree; GtkWidget *entry; guint handler_id; gboolean sel = FALSE; if (dlg) { gtk_window_present (GTK_WINDOW (dlg)); return; } w = prefwin_get_widgets (); dlg = PW("dlg_encoding"); tree = GTK_TREE_VIEW (PW("tree_encoding")); model = gtk_list_store_new (1, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (tree), GTK_TREE_MODEL (model)); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)), GTK_SELECTION_SINGLE); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "text", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tree), column); head = list = get_available_encodings (); while (list) { gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, (gchar *) list->data, -1); if (g_str_equal ((gchar*) list->data, cfg.uname_encoding)) { memcpy (&iter_sel, &iter, sizeof (GtkTreeIter)); sel = TRUE; } list = g_list_next (list); } if (sel) gui_select_treeview_row (&iter_sel, tree); entry = PW("entry_filter"); g_signal_connect (G_OBJECT (entry), "changed", G_CALLBACK (filter_encoding_list), (gpointer) tree); handler_id = g_signal_connect (G_OBJECT (tree), "cursor-changed", G_CALLBACK (encoding_changed_cb), w->encoding); g_object_set_data (G_OBJECT (tree), "callback_handler_id", GINT_TO_POINTER (handler_id)); g_object_set_data (G_OBJECT (tree), "encoding_list", head); g_signal_connect (G_OBJECT (dlg), "destroy", G_CALLBACK (free_encoding_list), (gpointer) head); gtk_dialog_run (GTK_DIALOG (dlg)); gtk_widget_destroy (dlg); dlg = NULL; } pureadmin-0.4/src/logfile.h0000644000175000017500000000237510667602721012661 00000000000000/* PureAdmin * Copyright (C) 2003 Isak Savo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Logfile-functions incl. callbacks to manage the logfile-viewer * * Copyright (C) 2003 Isak Savo */ #ifndef __LOGFILE_H__ #define __LOGFILE_H__ typedef enum { LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_NOTICE, LOG_DEBUG, NUM_LOGTAGS } log_textview_mode; extern GtkTextTag *logview_tags[NUM_LOGTAGS]; gboolean init_logfile (void); void close_logfile (void); void log_display_error_text (gint reason); void log_clear_logview (void); void read_logfile (void); #endif /* __LOGFILE_H__ */ pureadmin-0.4/src/eggstatusicon.c0000644000175000017500000005431210667602721014110 00000000000000/* eggstatusicon.c: * * Copyright (C) 2003 Sun Microsystems, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Authors: * Mark McLoughlin */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "eggstatusicon.h" #include #include "eggmarshalers.h" #include #ifndef EGG_COMPILATION #ifndef _ #define _(x) dgettext (GETTEXT_PACKAGE, x) #define N_(x) x #endif #else #define _(x) x #define N_(x) x #endif #ifndef M_PI # define M_PI 3.14159265358979323846 /* pi */ #endif enum{ PROP_0, PROP_PIXBUF, PROP_FILE, PROP_STOCK, PROP_PIXBUF_ANIMATION, PROP_STORAGE_TYPE, PROP_SIZE, PROP_BLINKING }; enum { ACTIVATE_SIGNAL, POPUP_MENU_SIGNAL, SIZE_CHANGED_SIGNAL, LAST_SIGNAL }; struct _EggStatusIconPrivate { GtkWidget *tray_icon; GtkWidget *image; gint size; GtkTooltips *tooltips; GtkImageType image_type; union { GdkPixbuf *pixbuf; const gchar *stock_id; GdkPixbufAnimation *animimation; } image_data; GdkPixbuf *blank_icon; guint blinking_timeout; guint blinking : 1; guint blink_off : 1; guint button_down : 1; GdkPixbuf *fade_from; GdkPixbuf *fade_to; GTimeVal blink_start; }; static void egg_status_icon_class_init (EggStatusIconClass *klass); static void egg_status_icon_init (EggStatusIcon *status_icon); static void egg_status_icon_finalize (GObject *object); static void egg_status_icon_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void egg_status_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void egg_status_icon_size_allocate (EggStatusIcon *status_icon, GtkAllocation *allocation); static gboolean egg_status_icon_button_press (EggStatusIcon *status_icon, GdkEventButton *event); static gboolean egg_status_icon_button_release (EggStatusIcon *status_icon, GdkEventButton *event); static void egg_status_icon_disable_blinking (EggStatusIcon *status_icon); static void egg_status_icon_reset_image_data (EggStatusIcon *status_icon); static GObjectClass *parent_class = NULL; static guint status_icon_signals [LAST_SIGNAL] = { 0 }; GType egg_status_icon_get_type (void) { static GType status_icon_type = 0; if (!status_icon_type) { static const GTypeInfo status_icon_info = { sizeof (EggStatusIconClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) egg_status_icon_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (EggStatusIcon), 0, /* n_preallocs */ (GInstanceInitFunc) egg_status_icon_init, }; status_icon_type = g_type_register_static (G_TYPE_OBJECT, "EggStatusIcon", &status_icon_info, 0); } return status_icon_type; } static void egg_status_icon_class_init (EggStatusIconClass *klass) { GObjectClass *gobject_class = (GObjectClass *) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = egg_status_icon_finalize; gobject_class->set_property = egg_status_icon_set_property; gobject_class->get_property = egg_status_icon_get_property; g_object_class_install_property (gobject_class, PROP_PIXBUF, g_param_spec_object ("pixbuf", _("Pixbuf"), _("A GdkPixbuf to display"), GDK_TYPE_PIXBUF, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FILE, g_param_spec_string ("file", _("Filename"), _("Filename to load and display"), NULL, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_STOCK, g_param_spec_string ("stock", _("Stock ID"), _("Stock ID for a stock image to display"), NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_PIXBUF_ANIMATION, g_param_spec_object ("pixbuf-animation", _("Animation"), _("GdkPixbufAnimation to display"), GDK_TYPE_PIXBUF_ANIMATION, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_STORAGE_TYPE, g_param_spec_enum ("image-type", _("Image type"), _("The representation being used for image data"), GTK_TYPE_IMAGE_TYPE, GTK_IMAGE_EMPTY, G_PARAM_READABLE)); g_object_class_install_property (gobject_class, PROP_SIZE, g_param_spec_int ("size", _("Size"), _("The size of the icon"), G_MININT, G_MAXINT, 0, G_PARAM_READABLE)); g_object_class_install_property (gobject_class, PROP_BLINKING, g_param_spec_boolean ("blinking", _("Blinking"), _("Whether or not the status icon is blinking"), FALSE, G_PARAM_READWRITE)); status_icon_signals [ACTIVATE_SIGNAL] = g_signal_new ("activate", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (EggStatusIconClass, activate), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); status_icon_signals [POPUP_MENU_SIGNAL] = g_signal_new ("popup-menu", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (EggStatusIconClass, popup_menu), NULL, NULL, _egg_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); status_icon_signals [SIZE_CHANGED_SIGNAL] = g_signal_new ("size-changed", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (EggStatusIconClass, size_changed), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); } static void egg_status_icon_init (EggStatusIcon *status_icon) { status_icon->priv = g_new0 (EggStatusIconPrivate, 1); status_icon->priv->image_type = GTK_IMAGE_EMPTY; status_icon->priv->size = G_MAXINT; status_icon->priv->tray_icon = GTK_WIDGET (egg_tray_icon_new (NULL)); gtk_widget_add_events (GTK_WIDGET (status_icon->priv->tray_icon), GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); g_signal_connect_swapped (status_icon->priv->tray_icon, "button-press-event", G_CALLBACK (egg_status_icon_button_press), status_icon); g_signal_connect_swapped (status_icon->priv->tray_icon, "button-release-event", G_CALLBACK (egg_status_icon_button_release), status_icon); status_icon->priv->image = gtk_image_new (); gtk_container_add (GTK_CONTAINER (status_icon->priv->tray_icon), status_icon->priv->image); g_signal_connect_swapped (status_icon->priv->image, "size-allocate", G_CALLBACK (egg_status_icon_size_allocate), status_icon); gtk_widget_show (status_icon->priv->image); gtk_widget_show (status_icon->priv->tray_icon); status_icon->priv->tooltips = gtk_tooltips_new (); g_object_ref (status_icon->priv->tooltips); gtk_object_sink (GTK_OBJECT (status_icon->priv->tooltips)); } static void egg_status_icon_finalize (GObject *object) { EggStatusIcon *status_icon = EGG_STATUS_ICON (object); egg_status_icon_disable_blinking (status_icon); egg_status_icon_reset_image_data (status_icon); if (status_icon->priv->blank_icon) g_object_unref (status_icon->priv->blank_icon); status_icon->priv->blank_icon = NULL; if (status_icon->priv->tooltips) g_object_unref (status_icon->priv->tooltips); status_icon->priv->tooltips = NULL; gtk_widget_destroy (status_icon->priv->tray_icon); g_free (status_icon->priv); G_OBJECT_CLASS (parent_class)->finalize (object); } static void egg_status_icon_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { EggStatusIcon *status_icon = EGG_STATUS_ICON (object); switch (prop_id) { case PROP_PIXBUF: egg_status_icon_set_from_pixbuf (status_icon, g_value_get_object (value)); break; case PROP_FILE: egg_status_icon_set_from_file (status_icon, g_value_get_string (value)); break; case PROP_STOCK: egg_status_icon_set_from_stock (status_icon, g_value_get_string (value)); break; case PROP_PIXBUF_ANIMATION: egg_status_icon_set_from_animation (status_icon, g_value_get_object (value)); break; case PROP_BLINKING: egg_status_icon_set_is_blinking (status_icon, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void egg_status_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { EggStatusIcon *status_icon = EGG_STATUS_ICON (object); switch (prop_id) { case PROP_PIXBUF: g_value_set_object (value, egg_status_icon_get_pixbuf (status_icon)); break; case PROP_STOCK: g_value_set_string (value, egg_status_icon_get_stock (status_icon)); break; case PROP_PIXBUF_ANIMATION: g_value_set_object (value, egg_status_icon_get_animation (status_icon)); break; case PROP_STORAGE_TYPE: g_value_set_enum (value, egg_status_icon_get_image_type (status_icon)); break; case PROP_SIZE: g_value_set_int (value, status_icon->priv->size); break; case PROP_BLINKING: g_value_set_boolean (value, status_icon->priv->blinking); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } EggStatusIcon * egg_status_icon_new (void) { return g_object_new (EGG_TYPE_STATUS_ICON, NULL); } EggStatusIcon * egg_status_icon_new_from_pixbuf (GdkPixbuf *pixbuf) { return g_object_new (EGG_TYPE_STATUS_ICON, "pixbuf", pixbuf, NULL); } EggStatusIcon * egg_status_icon_new_from_file (const gchar *filename) { return g_object_new (EGG_TYPE_STATUS_ICON, "file", filename, NULL); } EggStatusIcon * egg_status_icon_new_from_stock (const gchar *stock_id) { return g_object_new (EGG_TYPE_STATUS_ICON, "stock", stock_id, NULL); } EggStatusIcon * egg_status_icon_new_from_animation (GdkPixbufAnimation *animation) { return g_object_new (EGG_TYPE_STATUS_ICON, "pixbuf_animation", animation, NULL); } static void emit_activate_signal (EggStatusIcon *status_icon) { g_signal_emit (status_icon, status_icon_signals [ACTIVATE_SIGNAL], 0); } #ifdef UNUSED static void emit_popup_menu_signal (EggStatusIcon *status_icon, guint button, guint32 activate_time) { g_signal_emit (status_icon, status_icon_signals [POPUP_MENU_SIGNAL], 0, button, activate_time); } #endif static gboolean emit_size_changed_signal (EggStatusIcon *status_icon, gint size) { gboolean handled = FALSE; g_signal_emit (status_icon, status_icon_signals [SIZE_CHANGED_SIGNAL], 0, size, &handled); return handled; } #if 0 static GdkPixbuf * egg_status_icon_blank_icon (EggStatusIcon *status_icon) { if (status_icon->priv->blank_icon) { gint width, height; width = gdk_pixbuf_get_width (status_icon->priv->blank_icon); height = gdk_pixbuf_get_width (status_icon->priv->blank_icon); if (width == status_icon->priv->size && height == status_icon->priv->size) { return status_icon->priv->blank_icon; } else { g_object_unref (status_icon->priv->blank_icon); status_icon->priv->blank_icon = NULL; } } status_icon->priv->blank_icon = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, status_icon->priv->size, status_icon->priv->size); if (status_icon->priv->blank_icon) gdk_pixbuf_fill (status_icon->priv->blank_icon, 0); return status_icon->priv->blank_icon; } #endif /* 0 */ static void egg_status_icon_update_image (EggStatusIcon *status_icon) { switch (status_icon->priv->image_type) { case GTK_IMAGE_PIXBUF: case GTK_IMAGE_STOCK: { GdkPixbuf *pixbuf; pixbuf = status_icon->priv->image_data.pixbuf; if (pixbuf) { GdkPixbuf *scaled; gint size; gint width; gint height; size = status_icon->priv->size; width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); if (width > size || height > size) { scaled = gdk_pixbuf_scale_simple (pixbuf, MIN (size, width), MIN (size, height), GDK_INTERP_BILINEAR); } else { scaled = g_object_ref (pixbuf); } gtk_image_set_from_pixbuf (GTK_IMAGE (status_icon->priv->image), scaled); g_object_unref (scaled); } else { gtk_image_set_from_pixbuf (GTK_IMAGE (status_icon->priv->image), NULL); } } break; case GTK_IMAGE_ANIMATION: case GTK_IMAGE_EMPTY: gtk_image_set_from_pixbuf (GTK_IMAGE (status_icon->priv->image), NULL); break; default: g_assert_not_reached (); break; } } static void egg_status_icon_size_allocate (EggStatusIcon *status_icon, GtkAllocation *allocation) { GtkOrientation orientation; gint size; orientation = egg_tray_icon_get_orientation (EGG_TRAY_ICON (status_icon->priv->tray_icon)); if (orientation == GTK_ORIENTATION_HORIZONTAL) size = allocation->height; else size = allocation->width; if (status_icon->priv->size != size) { status_icon->priv->size = size; g_object_notify (G_OBJECT (status_icon), "size"); if (!emit_size_changed_signal (status_icon, size)) { egg_status_icon_update_image (status_icon); } } } static gboolean egg_status_icon_button_press (EggStatusIcon *status_icon, GdkEventButton *event) { if (event->button == 1 && !status_icon->priv->button_down) { status_icon->priv->button_down = TRUE; return TRUE; } return FALSE; } static gboolean egg_status_icon_button_release (EggStatusIcon *status_icon, GdkEventButton *event) { if (event->button == 1 && status_icon->priv->button_down) { status_icon->priv->button_down = FALSE; emit_activate_signal (status_icon); return TRUE; } return FALSE; } static void egg_status_icon_reset_image_data (EggStatusIcon *status_icon) { switch (status_icon->priv->image_type) { case GTK_IMAGE_PIXBUF: case GTK_IMAGE_STOCK: status_icon->priv->image_type = GTK_IMAGE_EMPTY; if (status_icon->priv->image_data.pixbuf) g_object_unref (status_icon->priv->image_data.pixbuf); status_icon->priv->image_data.pixbuf = NULL; g_object_notify (G_OBJECT (status_icon), "image-type"); g_object_notify (G_OBJECT (status_icon), "pixbuf"); break; case GTK_IMAGE_ANIMATION: case GTK_IMAGE_EMPTY: break; default: g_assert_not_reached (); break; } } void egg_status_icon_set_from_pixbuf (EggStatusIcon *status_icon, GdkPixbuf *pixbuf) { g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); g_return_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf)); if (pixbuf) g_object_ref (pixbuf); g_object_freeze_notify (G_OBJECT (status_icon)); egg_status_icon_reset_image_data (status_icon); status_icon->priv->image_type = GTK_IMAGE_PIXBUF; status_icon->priv->image_data.pixbuf = pixbuf; g_object_notify (G_OBJECT (status_icon), "image-type"); g_object_notify (G_OBJECT (status_icon), "pixbuf"); g_object_thaw_notify (G_OBJECT (status_icon)); egg_status_icon_update_image (status_icon); } void egg_status_icon_set_from_file (EggStatusIcon *status_icon, const gchar *filename) { GdkPixbuf *buffer; GError *error = NULL; g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); g_return_if_fail (filename != NULL); buffer = gdk_pixbuf_new_from_file(filename, &error); if (!buffer) return; /* FIXME: what should we do with the error object? */ egg_status_icon_set_from_pixbuf(status_icon, buffer); g_object_unref(buffer); } void egg_status_icon_set_from_stock (EggStatusIcon *status_icon, const gchar *stock_id) { GtkIconSet *iconset; GdkPixbuf *pixbuf; static GtkWidget *invisible = NULL; g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); iconset = gtk_icon_factory_lookup_default (GTK_STOCK_EXECUTE); if (!iconset) return; if (!invisible) invisible = gtk_invisible_new (); pixbuf = gtk_icon_set_render_icon (iconset, gtk_widget_get_style (invisible), GTK_TEXT_DIR_NONE, GTK_STATE_NORMAL, GTK_ICON_SIZE_LARGE_TOOLBAR, NULL, NULL); egg_status_icon_set_from_pixbuf (status_icon, pixbuf); g_object_unref (pixbuf); status_icon->priv->image_type = GTK_IMAGE_STOCK; } void egg_status_icon_set_from_animation (EggStatusIcon *status_icon, GdkPixbufAnimation *animation) { g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); g_return_if_fail (animation == NULL || GDK_IS_PIXBUF_ANIMATION (animation)); } GtkImageType egg_status_icon_get_image_type (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), GTK_IMAGE_EMPTY); return status_icon->priv->image_type; } GdkPixbuf * egg_status_icon_get_pixbuf (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), NULL); g_return_val_if_fail (status_icon->priv->image_type == GTK_IMAGE_PIXBUF || status_icon->priv->image_type == GTK_IMAGE_STOCK || status_icon->priv->image_type == GTK_IMAGE_EMPTY, NULL); if (status_icon->priv->image_type == GTK_IMAGE_EMPTY) status_icon->priv->image_data.pixbuf = NULL; return status_icon->priv->image_data.pixbuf; } G_CONST_RETURN gchar * egg_status_icon_get_stock (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), NULL); return NULL; } GdkPixbufAnimation * egg_status_icon_get_animation (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), NULL); return NULL; } gint egg_status_icon_get_size (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), -1); return status_icon->priv->size; } void egg_status_icon_set_tooltip (EggStatusIcon *status_icon, const gchar *tooltip_text, const gchar *tooltip_private) { g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); gtk_tooltips_set_tip (status_icon->priv->tooltips, status_icon->priv->tray_icon, tooltip_text, tooltip_private); } void egg_status_icon_set_balloon_text (EggStatusIcon *status_icon, const gchar *text) { g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); } G_CONST_RETURN gchar * egg_status_icon_get_balloon_text (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), NULL); return NULL; } static gboolean egg_status_icon_blinker (EggStatusIcon *status_icon) { gdouble d; GTimeVal t, now; double diff; int alpha, width, height; GdkPixbuf *buffer; t = status_icon->priv->blink_start; g_get_current_time (&now); /* Figure out how many microseconds have passed since we started */ diff = (now.tv_sec - t.tv_sec) * 1000000; diff += (now.tv_usec - t.tv_usec); /* Convert to seconds */ diff = diff / 1000000; /* 0.8 is a scaling factor, PI/2 is to ensure we start at full opacity and swoop down */ d = sin (M_PI * (diff * 0.5) + (M_PI / 2)); /* ensure it's always positive, this gives us a bouncing sine graph */ if (d < 0) d = d * -1; alpha = (int) (d * 255); width = gdk_pixbuf_get_width (status_icon->priv->image_data.pixbuf); height = gdk_pixbuf_get_height (status_icon->priv->image_data.pixbuf); /* Clear buffer */ buffer = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height); gdk_pixbuf_fill (buffer, 0); gdk_pixbuf_composite (status_icon->priv->image_data.pixbuf, buffer, 0, 0, width, height, 0, 0, 1, 1, GDK_INTERP_BILINEAR, alpha); gtk_image_set_from_pixbuf (GTK_IMAGE (status_icon->priv->image), buffer); g_object_unref (buffer); return TRUE; } static void egg_status_icon_enable_blinking (EggStatusIcon *status_icon) { if (!status_icon->priv->blinking_timeout) { g_get_current_time(&status_icon->priv->blink_start); status_icon->priv->blinking_timeout = g_timeout_add (50, (GSourceFunc) egg_status_icon_blinker, status_icon); } } static void egg_status_icon_disable_blinking (EggStatusIcon *status_icon) { if (status_icon->priv->blinking_timeout) { g_source_remove (status_icon->priv->blinking_timeout); status_icon->priv->blinking_timeout = 0; status_icon->priv->blink_off = FALSE; egg_status_icon_update_image (status_icon); } } void egg_status_icon_set_is_blinking (EggStatusIcon *status_icon, gboolean is_blinking) { g_return_if_fail (EGG_IS_STATUS_ICON (status_icon)); is_blinking = is_blinking != FALSE; if (status_icon->priv->blinking != is_blinking) { status_icon->priv->blinking = is_blinking; if (is_blinking) egg_status_icon_enable_blinking (status_icon); else egg_status_icon_disable_blinking (status_icon); g_object_notify (G_OBJECT (status_icon), "blinking"); } } gboolean egg_status_icon_get_is_blinking (EggStatusIcon *status_icon) { g_return_val_if_fail (EGG_IS_STATUS_ICON (status_icon), FALSE); return status_icon->priv->blinking; } pureadmin-0.4/autogen.sh0000755000175000017500000001613010667602725012277 00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. # Parts of this script taken from the Cairo source tree LIBTOOLIZE=${LIBTOOLIZE-libtoolize} LIBTOOLIZE_FLAGS="--copy --force" AUTOHEADER=${AUTOHEADER-autoheader} AUTOMAKE_FLAGS="--add-missing --gnu" AUTOCONF=${AUTOCONF-autoconf} # Some stuff requires automake >= 1.7 automake_min_vers=1.7 aclocal_min_vers=$automake_min_vers autoconf_min_vers=2.54 LC_ALL=C PACKAGE="pureadmin" srcdir=`dirname $0` test -z "$srcdir" && srcdir=. DIE=0 # if [ -n "$GNOME2_DIR" ]; then # ACLOCAL_FLAGS="-I $GNOME2_DIR/share/aclocal $ACLOCAL_FLAGS" # LD_LIBRARY_PATH="$GNOME2_DIR/lib:$LD_LIBRARY_PATH" # PATH="$GNOME2_DIR/bin:$PATH" # export PATH # export LD_LIBRARY_PATH # fi (test -f $srcdir/configure.in) || { echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo " top-level package directory" exit 1 } # Check for required autoconf version if ($AUTOCONF --version) < /dev/null > /dev/null 2>&1 ; then if ($AUTOCONF --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$autoconf_min_vers') \ exit 1; exit 0; }'); then echo "$ARGV0: ERROR: \`$AUTOCONF' is too old." $AUTOCONF --version echo " (version $autoconf_min_vers or newer is required)" DIE="yes" fi else echo echo "**Error**: You must have \`autoconf' installed." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 fi (grep "^AC_PROG_INTLTOOL" $srcdir/configure.in >/dev/null) && { (intltoolize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`intltool' installed." echo "You can get it from:" echo " ftp://ftp.gnome.org/pub/GNOME/" DIE=1 } } (grep "^AM_PROG_XML_I18N_TOOLS" $srcdir/configure.in >/dev/null) && { (xml-i18n-toolize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`xml-i18n-toolize' installed." echo "You can get it from:" echo " ftp://ftp.gnome.org/pub/GNOME/" DIE=1 } } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 } } (grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.in >/dev/null) && { (grep "sed.*POTFILES" $srcdir/configure.in) > /dev/null || \ (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`glib' installed." echo "You can get it from: ftp://ftp.gtk.org/pub/gtk" DIE=1 } } # # Hunt for an appropriate version of automake and aclocal; we can't # assume that 'automake' is necessarily the most recent installed version # # We check automake first to allow it to be a newer version than we know about. # if test x"$AUTOMAKE" = x || test x"$ACLOCAL" = x ; then am_ver="" for ver in "" "-1.9" "-1.8" "-1.7" ; do am="automake$ver" if ($am --version) < /dev/null > /dev/null 2>&1 ; then if ($am --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$automake_min_vers') \ exit 1; exit 0; }'); then : ; else am_ver=$ver break; fi fi done AUTOMAKE=${AUTOMAKE-automake$am_ver} ACLOCAL=${ACLOCAL-aclocal$am_ver} fi # # Now repeat the tests with the copies we decided upon and error out if they # aren't sufficiently new. # if ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 ; then if ($AUTOMAKE --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$automake_min_vers') \ exit 1; exit 0; }'); then echo "$ARGV0: ERROR: \`$AUTOMAKE' is too old." $AUTOMAKE --version echo " (version $automake_min_vers or newer is required)" DIE="yes" fi if ($ACLOCAL --version) < /dev/null > /dev/null 2>&1; then if ($ACLOCAL --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$aclocal_min_vers' ) \ exit 1; exit 0; }' ); then echo "$ARGV0: ERROR: \`$ACLOCAL' is too old." $ACLOCAL --version echo " (version $aclocal_min_vers or newer is required)" DIE="yes" fi else echo $ACLOCAL: command not found echo echo "$ARGV0: ERROR: Missing \`$ACLOCAL'" echo " The version of $AUTOMAKE installed doesn't appear recent enough." DIE="yes" fi else echo $AUTOMAKE: command not found echo echo "$ARGV0: ERROR: You must have \`automake' installed to compile $PACKAGE." echo " (version $automake_min_vers or newer is required)" DIE="yes" fi if test -z "$ACLOCAL_FLAGS"; then acdir=`$ACLOCAL --print-ac-dir` if [ ! -f $acdir/pkg.m4 ]; then echo "$ARGV0: Error: Could not find pkg-config macros." echo " (Looked in $acdir/pkg.m4)" echo " If pkg.m4 is available in /another/directory, please set" echo " ACLOCAL_FLAGS=\"-I /another/directory\"" echo " Otherwise, please install pkg-config." echo "" echo "pkg-config is available from:" echo "http://www.freedesktop.org/software/pkgconfig/" DIE=yes fi fi if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -path $srcdir/CVS -prune -o -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" if grep "^AM_GLIB_GNU_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running glib-gettextize... Ignore non-fatal messages." echo "no" | glib-gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AC_PROG_INTLTOOL" configure.in >/dev/null; then echo "Running intltoolize..." intltoolize --copy --force --automake fi if grep "^AM_PROG_XML_I18N_TOOLS" configure.in >/dev/null; then echo "Running xml-i18n-toolize..." xml-i18n-toolize --copy --force --automake fi if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then if test -z "$NO_LIBTOOLIZE" ; then echo "Running libtoolize..." libtoolize --force --copy fi fi echo "Running aclocal: $ACLOCAL $aclocalinclude ..." $ACLOCAL $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader ($AUTOHEADER)..." $AUTOHEADER fi echo "Running automake: $AUTOMAKE $AUTOMAKE_FLAGS $am_opt ..." $AUTOMAKE $AUTOMAKE_FLAGS $am_opt echo "Running autoconf: $AUTOCONF ..." $AUTOCONF ) fi done conf_flags="--enable-maintainer-mode" if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile. || exit 1 else echo Skipping configure process. fi pureadmin-0.4/AUTHORS0000644000175000017500000000044610667602725011351 00000000000000Project maintainer/Lead developer: Isak Savo Co-developer: Jörgen Lidholm Translations: Swedish (sv.po) - Isak Savo Italian (it.po) - Massimo Magliocca French (fr.po) - Sébastien LOSS pureadmin-0.4/README0000644000175000017500000000574010667602725011163 00000000000000 PureAdmin - A Management Utility for PureFTPd PureAdmin is a graphical tool used to make the management of PureFTPd a little easier. It uses the GTK+2.x widgets for its GUI and thus are not dependent on a specific desktop environment such as GNOME or KDE. It is, however, designed with the GNOME Human Interface Guidelines in mind so it should integrate nicely with at least GNOME. PureAdmin was inspired by KcmPureFTPd which is a graphical tool for KDEs control-center but the goal of PureAdmin is somewhat different than that of KcmPureFTPd. My goal is to create an all-in-one application that makes management and monitoring of a ftp-server as easy as possible. Although I believe that no control should be taken from the administrator, PureAdmin is there to provide help and sane default-values for those who are not familiar with all the functions of the server. An administrator could use PureAdmin as an alternative - or even better - as a complement to the text-mode utilities distributed with PureFTPd. So, to summon up the previous two paragraphs. The main goals of PureAdmin and the reason for its existence are: * Stand-alone application, not dependent on GNOME/KDE/... * Nice, human friendly GUI with easy to use and easy to understand options and controls. * Keep control of the server in the hands of the administrator. For contact information, see the Authors file. Official web page: http://purify.sourceforge.net/ ******************Compiling and Installing PureAdmin**************************** There are generic build instructions in the file INSTALL distributed with this source package. There are, however, some options to the configure script that can be used to tune the compile to your system: --enable-binreloc This will enable binary relocationability to PureAdmin. It essentially means that the NO hard coded paths will be stored in the executable. This is used to be able to create autopackage packages. This is generally a good thing and should only be disabled if you'r sure it causes trouble for you. --enable-binreloc-threads Enable threading support for the binreloc code. You shouldn't change this! Really, don't! PureAdmin is multi threaded and changing this can lead to weird bugs! --enable-debug Enable additional debugging messages to the log window. Try this if you're experiencing problem and like to figure out what's wrong. Enabling this and sending the relevant lines to the author when doing bug reports gives you a golden start :-) *** WARNING: *** This program is provided "AS IS" with no warranty what so ever. Make sure you understand that although I try to test every part of the code, there may be bugs that I've missed that can ruin your pure-ftpd virtual user database. A backup of your user configuration is not a bad idea. Using this program in a production/critical environment is not recommended unless you are aware of, and accept the above stated risk. pureadmin-0.4/usermanager.glade0000644000175000017500000031721710667602725013617 00000000000000 6 PureAdmin: Users GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True True usericon.png True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_CENTER True True False 5 True False 5 True False 5 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT True True True True False True False False False 0 True True True True 10 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-new 4 0.5 0.5 0 0 0 False False True _Add new user... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-properties 4 0.5 0.5 0 0 0 False False True _Edit user True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-remove 4 0.5 0.5 0 0 0 False False True _Remove user True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 0 False False True False 0 True gtk-dialog-info 6 0 0 0 0 0 False False True <i>The users here are "Virtual Users" and only exist in PureFTP. Other users (such as normal accounts) may also be able to log in depending on your server-configuration.</i> False True GTK_JUSTIFY_LEFT True False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 True True 5 False False 0 True True True False 5 True True True True GTK_POS_TOP False False 5 True 8 3 False 3 3 True Username: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True False The name the users uses to log in True True True 32 True * False 1 2 0 1 True Real Name: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True False The full name of the user. True True True 0 True * False 1 2 1 2 True Home Directory: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True False True Browse... True GTK_RELIEF_NORMAL True 2 3 2 3 fill True False True Change/Set Password... True GTK_RELIEF_NORMAL True 1 2 7 8 fill True Fake root: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True False Directory where the user will be logged in to. By default, the home directory is also the top (root) directory. True True True 0 True * False 1 2 2 3 True False This directory is the top directory where the user can browse while logged in. True True True 0 True * False 1 2 4 5 True False If checked, then the user won't be able to browse files other than those in the fake root directory and its sub-directories. True Use a fake root (Recommended) True GTK_RELIEF_NORMAL True True False True 0 2 3 4 10 fill True User ID: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True Group ID: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 6 7 fill True False This is a list of all users with a uid above 100 True -1 1 2 5 6 fill True False This is a list of all found groups above gid 100 True -1 1 2 6 7 fill <i>Invalid UID</i> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 5 6 fill <i>Invalid GID</i> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 6 7 fill True False True Browse... True GTK_RELIEF_NORMAL True 2 3 4 5 fill False True True Personal Information False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 5 True 13 3 False 3 3 True Max Bandwidth: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True False 5 True Up: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False Maximum speed for upload from this user True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 9999 1 10 10 0 True True True Down: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False Maximum speed for download for this user True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 9999 1 10 10 0 True True 1 2 1 2 fill True <i>(Kb/s)</i> False True GTK_JUSTIFY_LEFT False False 0 0.5 3 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 1 2 fill True Max Files: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True False The maximum number of files owned by the selected user. True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 65535 1 10 10 1 2 2 3 True Max Size: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True False The maximum file size owned by the selected user at any time. True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 65535 1 10 10 1 2 3 4 True File Ratio: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True False 5 True Up: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False Ratio is the relations between upload and download for the user. True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 100 1 10 10 0 True True True Down: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 100 1 10 10 0 True True 1 2 4 5 fill fill True Timed Restrictions: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True False The timespan in which the user is able to log in (24h format). Example: 1830-0530 True True True 0 0000-0000 True * False 1 2 5 6 True Max sim. sessions: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 6 7 fill True False Maximum number of simultaneous connections by the selected user. True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 100 1 10 10 1 2 6 7 True Allowed Local IPs: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 9 10 fill True False True True True 0 True * False 1 2 9 10 True (<i>0 disables restriction</i>) False True GTK_JUSTIFY_LEFT False False 0 0.5 3 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Denied Local IPs: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 10 11 fill True False True True True 0 True * False 1 2 10 11 True Allowed Client IPs: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 11 12 fill True False True True True 0 True * False 1 2 11 12 True Denied Client IPs: False False GTK_JUSTIFY_LEFT False False 0 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 12 13 fill True False True True True 0 True * False 1 2 12 13 True <i>(Mb)</i> False True GTK_JUSTIFY_LEFT False False 0 0.5 3 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 3 4 fill True <i>(Comma separated list, leave empty for no restriction)</i> False True GTK_JUSTIFY_LEFT True False 0 0.5 3 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 3 8 9 fill True 0 3 7 8 10 fill fill False False True Restrictions False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True True True 0 True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-cancel 4 0.5 0.5 0 0 0 False False True _Cancel Changes True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False False True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-save 4 0.5 0.5 0 0 0 False False True _Save Changes True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False False 0 False False 0 True True 0 True True True 0 False False True GTK_BUTTONBOX_DEFAULT_STYLE 0 True True True gtk-help True GTK_RELIEF_NORMAL True True True True gtk-close True GTK_RELIEF_NORMAL True 0 False False 6 PureAdmin: Enter Password GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False usericon.png True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True False 12 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True False True True True GTK_RELIEF_NORMAL True -5 True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-ok 4 0.5 0.5 0 0 0 False False True Set Password True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False True GTK_PACK_END 6 True False 12 True user_identity.png 0 0 0 0 0 True True True False 6 True <span weight="bold" size="larger">Set Password</span> Enter the password you wish to set for the user. False True GTK_JUSTIFY_LEFT True False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 2 2 False 5 5 True True True True False 0 True * False 1 2 0 1 True True True False 0 True * True 1 2 1 2 True Password: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Verify Password: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill 0 False False 0 True True 0 True True 6 PureAdmin: Create new user GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False True usericon.png True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True False 6 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True False True True True GTK_RELIEF_NORMAL True -5 True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-ok 4 0.5 0.5 0 0 0 False False True _Add User True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False True GTK_PACK_END True False 12 True user_identity.png 0 0 0 0 0 False False True False 0 True <span weight="bold" size="larger">Enter Userinfo</span> Please enter the required details for the user to be created. False True GTK_JUSTIFY_LEFT True False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 3 2 False 3 3 True Username: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Password: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True Verify Password: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True True True False 0 True * True 1 2 2 3 True True True False 0 True * False 1 2 1 2 True True True True True 0 True * False 1 2 0 1 6 12 False False 0 True True 0 True True pureadmin-0.4/mkinstalldirs0000755000175000017500000000370410670523033013073 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here pureadmin-0.4/intltool-update.in0000644000175000017500000006732710670523033013754 00000000000000#!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Updater # # Copyright (C) 2000-2003 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Maciej Stachowiak # Darin Adler ## Release information my $PROGRAM = "intltool-update"; my $VERSION = "0.35.5"; my $PACKAGE = "intltool"; ## Loaded modules use strict; use Getopt::Long; use Cwd; use File::Copy; use File::Find; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $DIST_ARG = 0; my $POT_ARG = 0; my $HEADERS_ARG = 0; my $MAINTAIN_ARG = 0; my $REPORT_ARG = 0; my $VERBOSE = 0; my $GETTEXT_PACKAGE = ""; my $OUTPUT_FILE = ""; my @languages; my %varhash = (); my %po_files_by_lang = (); # Regular expressions to categorize file types. # FIXME: Please check if the following is correct my $xml_support = "xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required) "ui|". # Bonobo specific - User Interface desc. files "lang|". # ? "glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required) "scm(?:\\.in)*|". # ? (Note: .in is not required) "oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files "etspec|". # ? "server(?:\\.in)+|". # Bonobo specific "sheet(?:\\.in)+|". # ? "schemas(?:\\.in)+|". # GConf specific "pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer. "kbd(?:\\.in)+"; # GOK specific. my $ini_support = "icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec "desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec "caves(?:\\.in)+|". # GNOME Games specific "directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec "soundlist(?:\\.in)+|". # GNOME specific "keys(?:\\.in)+|". # GNOME Mime database specific "theme(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec "service(?:\\.in)+"; # DBus specific my $buildin_gettext_support = "c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py"; ## Always flush buffer when printing $| = 1; ## Sometimes the source tree will be rooted somewhere else. my $SRCDIR = $ENV{"srcdir"} || "."; my $POTFILES_in; $POTFILES_in = "<$SRCDIR/POTFILES.in"; my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "dist|d" => \$DIST_ARG, "pot|p" => \$POT_ARG, "headers|s" => \$HEADERS_ARG, "maintain|m" => \$MAINTAIN_ARG, "report|r" => \$REPORT_ARG, "verbose|x" => \$VERBOSE, "gettext-package|g=s" => \$GETTEXT_PACKAGE, "output-file|o=s" => \$OUTPUT_FILE, ) or &Console_WriteError_InvalidOption; &Console_Write_IntltoolHelp if $HELP_ARG; &Console_Write_IntltoolVersion if $VERSION_ARG; my $arg_count = ($DIST_ARG > 0) + ($POT_ARG > 0) + ($HEADERS_ARG > 0) + ($MAINTAIN_ARG > 0) + ($REPORT_ARG > 0); &Console_Write_IntltoolHelp if $arg_count > 1; my $PKGNAME = FindPackageName (); # --version and --help don't require a module name my $MODULE = $GETTEXT_PACKAGE || $PKGNAME || "unknown"; if ($POT_ARG) { &GenerateHeaders; &GeneratePOTemplate; } elsif ($HEADERS_ARG) { &GenerateHeaders; } elsif ($MAINTAIN_ARG) { &FindLeftoutFiles; } elsif ($REPORT_ARG) { &GenerateHeaders; &GeneratePOTemplate; &Console_Write_CoverageReport; } elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/) { my $lang = $ARGV[0]; ## Report error if the language file supplied ## to the command line is non-existent &Console_WriteError_NotExisting("$SRCDIR/$lang.po") if ! -s "$SRCDIR/$lang.po"; if (!$DIST_ARG) { print "Working, please wait..." if $VERBOSE; &GenerateHeaders; &GeneratePOTemplate; } &POFile_Update ($lang, $OUTPUT_FILE); &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE); } else { &Console_Write_IntltoolHelp; } exit; ######### sub Console_Write_IntltoolVersion { print <<_EOF_; ${PROGRAM} (${PACKAGE}) $VERSION Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler. Copyright (C) 2000-2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. _EOF_ exit; } sub Console_Write_IntltoolHelp { print <<_EOF_; Usage: ${PROGRAM} [OPTION]... LANGCODE Updates PO template files and merge them with the translations. Mode of operation (only one is allowed): -p, --pot generate the PO template only -s, --headers generate the header files in POTFILES.in -m, --maintain search for left out files from POTFILES.in -r, --report display a status report for the module -d, --dist merge LANGCODE.po with existing PO template Extra options: -g, --gettext-package=NAME override PO template name, useful with --pot -o, --output-file=FILE write merged translation to FILE -x, --verbose display lots of feedback --help display this help and exit --version output version information and exit Examples of use: ${PROGRAM} --pot just create a new PO template ${PROGRAM} xy create new PO template and merge xy.po with it Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") or send email to . _EOF_ exit; } sub echo_n { my $str = shift; my $ret = `echo "$str"`; $ret =~ s/\n$//; # do we need the "s" flag? return $ret; } sub POFile_DetermineType ($) { my $type = $_; my $gettext_type; my $xml_regex = "(?:" . $xml_support . ")"; my $ini_regex = "(?:" . $ini_support . ")"; my $buildin_regex = "(?:" . $buildin_gettext_support . ")"; if ($type =~ /\[type: gettext\/([^\]].*)]/) { $gettext_type=$1; } elsif ($type =~ /schemas(\.in)+$/) { $gettext_type="schemas"; } elsif ($type =~ /glade2?(\.in)*$/) { $gettext_type="glade"; } elsif ($type =~ /scm(\.in)*$/) { $gettext_type="scheme"; } elsif ($type =~ /keys(\.in)+$/) { $gettext_type="keys"; } # bucket types elsif ($type =~ /$xml_regex$/) { $gettext_type="xml"; } elsif ($type =~ /$ini_regex$/) { $gettext_type="ini"; } elsif ($type =~ /$buildin_regex$/) { $gettext_type="buildin"; } else { $gettext_type="unknown"; } return "gettext\/$gettext_type"; } sub TextFile_DetermineEncoding ($) { my $gettext_code="ASCII"; # All files are ASCII by default my $filetype=`file $_ | cut -d ' ' -f 2`; if ($? eq "0") { if ($filetype =~ /^(ISO|UTF)/) { chomp ($gettext_code = $filetype); } elsif ($filetype =~ /^XML/) { $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8 } } return $gettext_code; } sub isNotValidMissing { my ($file) = @_; return if $file =~ /^\{arch\}\/.*$/; return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/; } sub FindLeftoutFiles { my (@buf_i18n_plain, @buf_i18n_xml, @buf_i18n_xml_unmarked, @buf_i18n_ini, @buf_potfiles, @buf_potfiles_ignore, @buf_allfiles, @buf_allfiles_sorted, @buf_potfiles_sorted, @buf_potfiles_ignore_sorted ); ## Search and find all translatable files find sub { push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/; push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/; push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/; push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/; }, ".."; open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n"; @buf_potfiles = grep !/^(#|\s*$)/, ; close POTFILES; foreach (@buf_potfiles) { s/^\[.*]\s*//; } print "Searching for missing translatable files...\n" if $VERBOSE; ## Check if we should ignore some found files, when ## comparing with POTFILES.in foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") { (-s "$SRCDIR/$ignore") or next; if ("$ignore" eq "POTFILES.ignore") { print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n". "content of this file to POTFILES.skip.\n"; } print "Found $ignore: Ignoring files...\n" if $VERBOSE; open FILE, "<$SRCDIR/$ignore" or die "ERROR: Failed to open $SRCDIR/$ignore!\n"; while () { push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/; } close FILE; @buf_potfiles_ignore_sorted = sort (@buf_potfiles_ignore); } foreach my $file (@buf_i18n_plain) { my $in_comment = 0; my $in_macro = 0; open FILE, "<$file"; while () { # Handle continued multi-line comment. if ($in_comment) { next unless s-.*\*/--; $in_comment = 0; } # Handle continued macro. if ($in_macro) { $in_macro = 0 unless /\\$/; next; } # Handle start of macro (or any preprocessor directive). if (/^\s*\#/) { $in_macro = 1 if /^([^\\]|\\.)*\\$/; next; } # Handle comments and quoted text. while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy { my $match = $1; if ($match eq "/*") { if (!s-/\*.*?\*/--) { s-/\*.*--; $in_comment = 1; } } elsif ($match eq "//") { s-//.*--; } else # ' or " { if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) { warn "mismatched quotes at line $. in $file\n"; s-$match.*--; } } } if (/\w\.GetString *\(QUOTEDTEXT/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { ## Remove the first 3 chars and add newline push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } ## N_ Q_ and _ are the three macros defined in gi8n.h if (/[NQ]?_ *\(QUOTEDTEXT/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { ## Remove the first 3 chars and add newline push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } } close FILE; } foreach my $file (@buf_i18n_xml) { open FILE, "<$file"; while () { # FIXME: share the pattern matching code with intltool-extract if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } } close FILE; } foreach my $file (@buf_i18n_ini) { open FILE, "<$file"; while () { if (/_(.*)=/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } } close FILE; } foreach my $file (@buf_i18n_xml_unmarked) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } } @buf_allfiles_sorted = sort (@buf_allfiles); @buf_potfiles_sorted = sort (@buf_potfiles); my %in2; foreach (@buf_potfiles_sorted) { $in2{$_} = 1; } foreach (@buf_potfiles_ignore_sorted) { $in2{$_} = 1; } my @result; foreach (@buf_allfiles_sorted) { if (!exists($in2{$_})) { push @result, $_ } } my @buf_potfiles_notexist; foreach (@buf_potfiles_sorted) { chomp (my $dummy = $_); if ("$dummy" ne "" and !(-f "$SRCDIR/../$dummy" or -f "../$dummy")) { push @buf_potfiles_notexist, $_; } } ## Save file with information about the files missing ## if any, and give information about this procedure. if (@result + @buf_potfiles_notexist > 0) { if (@result) { print "\n" if $VERBOSE; unlink "missing"; open OUT, ">missing"; print OUT @result; close OUT; warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n". "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n"; print STDERR @result, "\n"; warn "If some of these files are left out on purpose then please add them to\n". "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n". "of left out files has been written in the current directory.\n"; } if (@buf_potfiles_notexist) { unlink "notexist"; open OUT, ">notexist"; print OUT @buf_potfiles_notexist; close OUT; warn "\n" if ($VERBOSE or @result); warn "\e[1mThe following files do not exist anymore:\e[0m\n\n"; warn @buf_potfiles_notexist, "\n"; warn "Please remove them from POTFILES.in. A file \e[1m'notexist'\e[0m\n". "containing this list of absent files has been written in the current directory.\n"; } } ## If there is nothing to complain about, notify the user else { print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE; } } sub Console_WriteError_InvalidOption { ## Handle invalid arguments print STDERR "Try `${PROGRAM} --help' for more information.\n"; exit 1; } sub isIntltoolExtractInPath { my ($file) = @_; # If either a file exists, or when run it returns 0 exit status return 1 if ((-x $file) or (system("$file >/dev/null") == 0)); return 0; } sub GenerateHeaders { my $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} || "intltool-extract"; ## Generate the .h header files, so we can allow glade and ## xml translation support if (! isIntltoolExtractInPath("$EXTRACT")) { print STDERR "\n *** The intltool-extract script wasn't found!" ."\n *** Without it, intltool-update can not generate files.\n"; exit; } else { open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n"; while () { chomp; next if /^\[\s*encoding/; ## Find xml files in POTFILES.in and generate the ## files with help from the extract script my $gettext_type= &POFile_DetermineType ($1); if (/\.($xml_support|$ini_support)$/ || /^\[/) { s/^\[[^\[].*]\s*//; my $filename = "../$_"; if ($VERBOSE) { system ($EXTRACT, "--update", "--srcdir=$SRCDIR", "--type=$gettext_type", $filename); } else { system ($EXTRACT, "--update", "--type=$gettext_type", "--srcdir=$SRCDIR", "--quiet", $filename); } } } close FILE; } } # # Generate .pot file from POTFILES.in # sub GeneratePOTemplate { my $XGETTEXT = $ENV{"XGETTEXT"} || "@INTLTOOL_XGETTEXT@"; my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || ''; chomp $XGETTEXT; if (! -x $XGETTEXT) { print STDERR " *** xgettext is not found on this system!\n". " *** Without it, intltool-update can not extract strings.\n"; exit; } print "Building $MODULE.pot...\n" if $VERBOSE; open INFILE, $POTFILES_in; unlink "POTFILES.in.temp"; open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing"); my $gettext_support_nonascii = 0; # checks for GNU gettext >= 0.12 my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`; if ($? == 0) { $gettext_support_nonascii = 1; } else { # urge everybody to upgrade gettext print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n". " strings. That means you should install a version of gettext\n". " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n". " or have to let non-ASCII strings untranslated. (If there is any)\n"; } my $encoding = "ASCII"; my $forced_gettext_code; my @temp_headers; my $encoding_problem_is_reported = 0; while () { next if (/^#/ or /^\s*$/); chomp; my $gettext_code; if (/^\[\s*encoding:\s*(.*)\s*\]/) { $forced_gettext_code=$1; } elsif (/\.($xml_support|$ini_support)$/ || /^\[/) { s/^\[.*]\s*//; print OUTFILE "../$_.h\n"; push @temp_headers, "../$_.h"; $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code); } else { print OUTFILE "$SRCDIR/../$_\n"; $gettext_code = &TextFile_DetermineEncoding ("$SRCDIR/../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code); } next if (! $gettext_support_nonascii); if (defined $forced_gettext_code) { $encoding=$forced_gettext_code; } elsif (defined $gettext_code and "$encoding" ne "$gettext_code") { if ($encoding eq "ASCII") { $encoding=$gettext_code; } elsif ($gettext_code ne "ASCII") { # Only report once because the message is quite long if (! $encoding_problem_is_reported) { print STDERR "WARNING: You should use the same file encoding for all your project files,\n". " but $PROGRAM thinks that most of the source files are in\n". " $encoding encoding, while \"$_\" is (likely) in\n". " $gettext_code encoding. If you are sure that all translatable strings\n". " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n". " line to POTFILES.in:\n\n". " [encoding: UTF-8]\n\n". " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n". "(such warning message will only be reported once.)\n"; $encoding_problem_is_reported = 1; } } } } close OUTFILE; close INFILE; unlink "$MODULE.pot"; my @xgettext_argument=("$XGETTEXT", "--add-comments", "--directory\=\.", "--output\=$MODULE\.pot", "--files-from\=\.\/POTFILES\.in\.temp"); my $XGETTEXT_KEYWORDS = &FindPOTKeywords; push @xgettext_argument, $XGETTEXT_KEYWORDS; my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress; push @xgettext_argument, "--msgid-bugs-address\=$MSGID_BUGS_ADDRESS" if $MSGID_BUGS_ADDRESS; push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii); push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS; my $xgettext_command = join ' ', @xgettext_argument; # intercept xgettext error message print "Running $xgettext_command\n" if $VERBOSE; my $xgettext_error_msg = `$xgettext_command 2>\&1`; my $command_failed = $?; unlink "POTFILES.in.temp"; print "Removing generated header (.h) files..." if $VERBOSE; unlink foreach (@temp_headers); print "done.\n" if $VERBOSE; if (! $command_failed) { if (! -e "$MODULE.pot") { print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE; } else { print "Wrote $MODULE.pot\n" if $VERBOSE; } } else { if ($xgettext_error_msg =~ /--from-code/) { # replace non-ASCII error message with a more useful one. print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n". " string marked for translation. Please make sure that all strings marked\n". " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n". " following line to POTFILES.in and rerun $PROGRAM:\n\n". " [encoding: UTF-8]\n\n"; } else { print STDERR "$xgettext_error_msg"; if (-e "$MODULE.pot") { # is this possible? print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n". " Please consult error message above if there is any.\n"; } else { print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n". " error message above if there is any.\n"; } } exit (1); } } sub POFile_Update { -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n"; my $MSGMERGE = $ENV{"MSGMERGE"} || "@INTLTOOL_MSGMERGE@"; my ($lang, $outfile) = @_; print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE; my $infile = "$SRCDIR/$lang.po"; $outfile = "$SRCDIR/$lang.po" if ($outfile eq ""); # I think msgmerge won't overwrite old file if merge is not successful system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot"); } sub Console_WriteError_NotExisting { my ($file) = @_; ## Report error if supplied language file is non-existing print STDERR "$PROGRAM: $file does not exist!\n"; print STDERR "Try '$PROGRAM --help' for more information.\n"; exit; } sub GatherPOFiles { my @po_files = glob ("./*.po"); @languages = map (&POFile_GetLanguage, @po_files); foreach my $lang (@languages) { $po_files_by_lang{$lang} = shift (@po_files); } } sub POFile_GetLanguage ($) { s/^(.*\/)?(.+)\.po$/$2/; return $_; } sub Console_Write_TranslationStatus { my ($lang, $output_file) = @_; my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@"; $output_file = "$SRCDIR/$lang.po" if ($output_file eq ""); system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file); } sub Console_Write_CoverageReport { my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@"; &GatherPOFiles; foreach my $lang (@languages) { print "$lang: "; &POFile_Update ($lang, ""); } print "\n\n * Current translation support in $MODULE \n\n"; foreach my $lang (@languages) { print "$lang: "; system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po"); } } sub SubstituteVariable { my ($str) = @_; # always need to rewind file whenever it has been accessed seek (CONF, 0, 0); # cache each variable. varhash is global to we can add # variables elsewhere. while () { if (/^(\w+)=(.*)$/) { ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/; } } if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) { my $rest = $3; my $untouched = $1; my $sub = ""; # Ignore recursive definitions of variables $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/; return SubstituteVariable ("$untouched$sub$rest"); } # We're using Perl backticks ` and "echo -n" here in order to # expand any shell escapes (such as backticks themselves) in every variable return echo_n ($str); } sub CONF_Handle_Open { my $base_dirname = getcwd(); $base_dirname =~ s@.*/@@; my ($conf_in, $src_dir); if ($base_dirname =~ /^po(-.+)?$/) { if (-f "Makevars") { my $makefile_source; local (*IN); open (IN, ") { if (/^top_builddir[ \t]*=/) { $src_dir = $_; $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; chomp $src_dir; if (-f "$src_dir" . "/configure.ac") { $conf_in = "$src_dir" . "/configure.ac" . "\n"; } else { $conf_in = "$src_dir" . "/configure.in" . "\n"; } last; } } close IN; $conf_in || die "Cannot find top_builddir in Makevars."; } elsif (-f "../configure.ac") { $conf_in = "../configure.ac"; } elsif (-f "../configure.in") { $conf_in = "../configure.in"; } else { my $makefile_source; local (*IN); open (IN, ") { if (/^top_srcdir[ \t]*=/) { $src_dir = $_; $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; chomp $src_dir; $conf_in = "$src_dir" . "/configure.in" . "\n"; last; } } close IN; $conf_in || die "Cannot find top_srcdir in Makefile."; } open (CONF, "<$conf_in"); } else { print STDERR "$PROGRAM: Unable to proceed.\n" . "Make sure to run this script inside the po directory.\n"; exit; } } sub FindPackageName { my $version; my $domain = &FindMakevarsDomain; my $name = $domain || "untitled"; &CONF_Handle_Open; my $conf_source; { local (*IN); open (IN, "<&CONF") || return $name; seek (IN, 0, 0); local $/; # slurp mode $conf_source = ; close IN; } # priority for getting package name: # 1. GETTEXT_PACKAGE # 2. first argument of AC_INIT (with >= 2 arguments) # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument) # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m # the \s makes this not work, why? if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m) { ($name, $version) = ($1, $2); $name =~ s/[\[\]\s]//g; $version =~ s/[\[\]\s]//g; $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); } if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) { ($name, $version) = ($1, $2); $name =~ s/[\[\]\s]//g; $version =~ s/[\[\]\s]//g; $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); } # \s makes this not work, why? $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m; # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables. $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g; $name = $domain if $domain; $name = SubstituteVariable ($name); $name =~ s/^["'](.*)["']$/$1/; return $name if $name; } sub FindPOTKeywords { my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_"; my $varname = "XGETTEXT_OPTIONS"; my $make_source; { local (*IN); open (IN, "; close IN; } $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m; return $keywords; } sub FindMakevarsDomain { my $domain = ""; my $makevars_source; { local (*IN); open (IN, "; close IN; } $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m; $domain =~ s/^\s+//; $domain =~ s/\s+$//; return $domain; } sub FindMakevarsBugAddress { my $address = ""; my $makevars_source; { local (*IN); open (IN, "; close IN; } $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m; $address =~ s/^\s+//; $address =~ s/\s+$//; return $address; } pureadmin-0.4/po/0000777000175000017500000000000010670523443010770 500000000000000pureadmin-0.4/po/POTFILES.in0000644000175000017500000000073010667602724012467 00000000000000# -*-sh-*- # List of source files containing translatable strings. [encoding: UTF-8] src/cfg.c src/debugging.c src/dirbrowser.c src/famwrap.c src/gui_helper.c src/helper.c src/helpview.c src/logfile.c src/main.c src/mainwin.c src/mainwin_cb.c src/binreloc.c src/prefwin.c src/purepw.c src/srv_comm.c src/suexec.c src/usr_manager.c src/usr_manager_cb.c dialogs.glade mainwindow.glade prefwin.glade usermanager.glade # files added by intltool-prepare pureadmin.desktop.in pureadmin-0.4/po/tr.po0000644000175000017500000010403310670517374011700 00000000000000# Turkish translation for pureadmin # Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 # This file is distributed under the same license as the pureadmin package. # FIRST AUTHOR , 2006. # msgid "" msgstr "" "Project-Id-Version: pureadmin\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2006-03-05 22:18+0000\n" "Last-Translator: monarch \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 msgid "Directory" msgstr "Dizin" #: ../src/dirbrowser.c:155 msgid "The currently selected directory" msgstr "Güncel SeçilmiÅŸ Dizin" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Dizin seçin" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "" #: ../src/gui_helper.c:208 msgid "PureFTPd running (standalone)" msgstr "ProFTPd çalışıyor (Bağımsız)" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_Sunucuyu Durdur" #: ../src/gui_helper.c:213 msgid "PureFTPd running (inetd)" msgstr "PureFTPd çalışıyor (inet kontrollü)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr "ProFTPd çalışmıyor" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_Sunucuyu BaÅŸlat" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "İndiriliyor" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Yükleniyor" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, c-format msgid "%s of %s (%s%%) %s" msgstr "" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, fuzzy, c-format msgid "%s at %s" msgstr "%si Kb %si" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "Bilinmiyor" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 msgid "Invalid Unicode" msgstr "Yanlış Karakter Seti" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "İçe_rik" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "_GiriÅŸ" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "_Ana Pencere" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "K_ullanıcı Yöneticisi" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "_Tercihler" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: Yardım" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "Bölüm Seçiniz" #: ../src/helpview.c:301 msgid "Help not found" msgstr "Yardım bulunamadı" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin yardım dosyalarını bulamadı. Sorunu gidermek için PureAdmin " "programını tekrar yüklemeyi deneyiniz." #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "Kayıt dosyası göstericisi pasif durumda" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "Kayıt dosyası göstericisi pasif durumda çünkü bilgisayarınızda FAM kurulu " "deÄŸil. Kayıt dosyası göstericisini kullanmak isterseniz FAM'ı kurduktan " "sonra PureAdmin'i yeniden derleyiniz.\n" "\n" "Dağıtımınıza uygun paketi kontrol edebilir, yada http://oss.sgi.com/projects/" "fam/ adresinden FAM hakkında daha fazla bilgi alabilirsiniz." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "PureAdmin yerel FAM servisine baÄŸlanamadığından Kayıt dosyası göstericisi " "pasif durumda.\n" "FAM kurulmuÅŸ durumda, çalıştırabilir yada baÅŸka bir sunucuda " "baÅŸlatabilirsiniz.\n" "inet (Internet Süper Sunucu)'dan /etc/inetd.conf dosyasına bir giriÅŸ " "yapınız.\n" "\n" "Kayıt dosyası göstericisini kullanmak istiyorsanız FAM konfigürasyonunuzu " "kontrol ediniz." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "PureAdmin belirtilen kayıt dosyasını açamadığından, kayıt dosyası " "göstericisi pasif durumdadır.\n" "Kayıt dosyasını açmaya yetkili kullanıcı haklarına sahip olduÄŸunuzdan emin " "olun." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "PureAdmin deÄŸiÅŸiklikleri izleyemediÄŸinden kayıt dosyası göstericisi pasif " "durumdadır.\n" "Kayıt dosyasını açmaya yetkili kullanıcı haklarına sahip olduÄŸunuzdan emin " "olun." #: ../src/main.c:289 msgid "Fetching information about server activity, please wait..." msgstr "Sunucu faaliyet bilgisi hazırlanıyor, lütfen bekleyiniz..." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "Sunucu faaliyet bilgilerine ulaşılamıyor." #: ../src/mainwin.c:307 msgid "User" msgstr "Kullanıcı" #: ../src/mainwin.c:307 msgid "Host" msgstr "Sunucu" #: ../src/mainwin.c:307 msgid "Connections" msgstr "BaÄŸlantılar" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 #, fuzzy msgid "downloading" msgstr "İndiriliyor" #: ../src/mainwin.c:504 #, fuzzy msgid "uploading" msgstr "Yükleniyor" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "BaÅŸlangıç Programı Bulunamadı" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin sunucu baÅŸlatan ve durduran scripti beliritlen yerde bulamadı.\n" "Bu dosya RedHat (ve benzerlerinde) /etc/rc.d/init.d Slackware (ve " "benzerlerinde) /etc/rc.d/ altında belirtilmiÅŸ olabilir.\n" "BaÅŸlatma ve durdurma pasif durumda." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "Sunucuyu BaÅŸlatmada Hata" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "Sunucuyu Durdurmada Hata" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" "Varsayılan tarayıcı belirtilmedi. Bunu şöyle de çözebilirsiniz. \n" "Çevre DeÄŸiÅŸkenleri Ayarı $TARAYICI kısmına web tarayıcınızın adını " "yazın.\n" "\n" "GNOME kontrol panelinde Tercih Edilen Uygulamalar'ı açın tarayıcıyı orada " "belirtin.\n" "\n" "Sorgulanan sayfa:\n" "%s" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "Tarayıcı baÅŸlatılamadı" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" "Sistem hatası nedeniyle web tarayıcı baÅŸlatılamadı. Aynı hatayı almaya devam " "ederseniz, bu hatayı destek forumlarına bildirebilirsiniz.\n" "Bildirilen hata: %s" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "pure-pw çalıştırılabilir" #: ../src/prefwin.c:173 msgid "password file" msgstr "parola dosyası" #: ../src/prefwin.c:174 msgid "database file" msgstr "veritabanı dosyası" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 msgid "Not Found" msgstr "Bulunamadı" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "LütfenSeçiniz %s" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "Varsayılan Ev Dizinini Seçiniz" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "'pure-ftpwho' komutu bulunamadı. PureFTPd kurulmamış olabilir." #: ../src/srv_comm.c:443 #, fuzzy msgid "Permission denied" msgstr "İzin verilmedi" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "" #: ../src/srv_comm.c:456 #, fuzzy, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "Pure-ftpwho uygulaması çöktü: %d. Hata çıktısı: %s" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Yanlış Sahte root" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "SeçtiÄŸiniz sahte root baÅŸlangıç dizininin bir parçası deÄŸil. DeÄŸer " "varsayılan kullanıcı baÅŸlangıç dizinine getirildi." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Yanlış baÅŸlangıç dizini" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" #: ../src/usr_manager.c:274 msgid "Username" msgstr "" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Evet, Dosya Yarat" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "%s Parola dosyası oluÅŸturulurken bir hata meydana geldi.\n" "Bildirilen hata: %s" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "Dosya OluÅŸturma BaÅŸarısız" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "İzin verilmedi" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "" "Parola dosyasını okuma ve yazmaya yetkiniz yok. Kullanıcılarınızı " "yönetebilmek için PureAdmin'i root olarak çalıştırmalısınız." #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Kullanıcı ve Grup OluÅŸtur" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "FTP kullanıcıları ile kullanabileceÄŸiniz adanmış bir ftp-kullanıcısı ve -" "grubunuz bulunmamaktadır.\n" "Yeni kullanıcılar için bir ftp-grubu ve ftp-kullanıcısı oluÅŸturmak istter " "misiniz?" #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Evet, Hesap OluÅŸtur" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "Hesap OluÅŸturma BaÅŸarısız" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin sistem hesaplarını oluÅŸturamadı. Sistem hesaplarını manuel " "oluÅŸturmalısınız. Dağıtımınıza uygun araçları kullanın ve BENİOKU dosyasını " "okuyun. Sanal kullanıcılar PureFTPd paketiyle birlikte dağıtılmaktadır." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "Bu kullanıcıyı PureFTPd'den tamamen silerek, onun sunucuya giriÅŸ yapmasını " "engelleyecek.\n" "Bu kullanıcıyı silmek istediÄŸinize emin misiniz?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Evet, Kullanıcıyı _Sil" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "" #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "" #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "" #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "pure-pw komutu bulunamadı. Komutun yüklü olduÄŸundan ve doÄŸru dosyayı " "gösterdiÄŸinden emin olun.\n" #: ../src/usr_manager_cb.c:278 msgid "Long Username" msgstr "Çok uzun Kullanıcı Adı" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" "Yazdığınız kullanıcı adı 32 karakterden fazla. Bu, PureFTPd Sunucu'nun en " "üst sınırı.Yine de bu kullanıcı adını kullanarak devam etmek istiyor musunuz?" #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "Evet, Bu Kullanıcı adını kullan " #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "Kullanıcı zaten tanımlı" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" "Yazdığınız kullanıcı adı PureFTPd'de zaten tanımlı. Yeni giriÅŸ için baÅŸka " "bir kullanıcı adı seçmelisiniz." #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "Kullanıcı Ekleme BaÅŸarısız" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "Haklarınız yeterli olmadığından kullanıcı ekleme baÅŸarısız.\n" "Aynı dosya baÅŸka bir iÅŸlem tarafından kullanıldığından bu olmuÅŸ olabilir." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "KaydedilmemiÅŸ bilginiz var." #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "Halen bir kullanıcı bilgisini düzenliyorsunuz.\n" "Öncelikle bu bilgiyi kaydetmek ister misiniz?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "" "span size=\"small\">GNU Genel Kamu Lisansı koÅŸulları kapsamında yayınlanır." #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "Pure FTP Sunucusu için yararlı bir grafiksel konfigürasyon ve yönetim " "aracı.\n" "PureAdmin web sayfası: http://purify.sourceforge.net/\n" "PureFTPd web sayfası: http://www.pureftpd.org" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "PureAdmin Hakkında" #: ../dialogs.glade.h:12 #, fuzzy msgid "Apply System Changes" msgstr "DeÄŸiÅŸiklikleri _Kaydet" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Tüm _Kullanıcı BaÄŸlantılarını Kapat" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Transferi _Kapat" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "Seçilen kullanıcı için tüm baÄŸlantıları ve transferleri kapatır" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Seçilenleri kapat veya indir." #: ../dialogs.glade.h:17 msgid "Open the user editor and shows the selected users' information" msgstr "Kullanıcı editörünü açın ve seçilen kullanıcının bilgisini görün." #: ../dialogs.glade.h:18 msgid "Select Character Encoding" msgstr "Karakter Kodunu Seçiniz." #: ../dialogs.glade.h:19 #, fuzzy msgid "Yes, Apply Changes" msgstr "DeÄŸiÅŸiklikleri _İptal Et" #: ../dialogs.glade.h:20 msgid "_Don't show this message again" msgstr "Bu mesajı tekrar gösterme." #: ../dialogs.glade.h:21 msgid "_Filter" msgstr "_Filtre" #: ../dialogs.glade.h:22 msgid "_Show User Information" msgstr "_Kullanıcı Bilgisini Göster" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "Faaliyet:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Geçen Süre:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "Kayıt dosyası çıktısı" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "Aktif Kullanıcılar" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "İlerleme:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "Kalan süre:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Uzak sunucu:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "" #: ../mainwindow.glade.h:13 #, fuzzy msgid "Closes the selected transfer" msgstr "Seçilenleri kapat veya indir." #: ../mainwindow.glade.h:14 #, fuzzy msgid "Disconnects the selected user" msgstr "Seçilen kullanıcı için tüm baÄŸlantıları ve transferleri kapatır" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "" #: ../mainwindow.glade.h:16 msgid "Information about PureAdmin" msgstr "" #: ../mainwindow.glade.h:17 msgid "Lauch PureFTPd server" msgstr "" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Kayıt" #: ../mainwindow.glade.h:20 msgid "Manage Users" msgstr "Kullanıcıları Yönet" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Kullanıcıları _Yönet" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "PureFTPd Kullanıcılarını Yönet" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "Çevrimiçi Dokümantasyon" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "Çevrimiçi Destek" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "Çözümleme konsolunu açın. Hata raporlamada kullanışlıdır." #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "Süper Yönetici" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "Süper Yönetici: Çözümleme Konsolu" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Detaylı bilgi göster" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "" #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "" #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "" #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_Hakkında" #: ../mainwindow.glade.h:35 #, fuzzy msgid "_Close transfer" msgstr "Transferi _Kapat" #: ../mainwindow.glade.h:36 #, fuzzy msgid "_Connections" msgstr "BaÄŸlantılar" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "_Çözümleme Konsolu" #: ../mainwindow.glade.h:38 #, fuzzy msgid "_Disconnect user" msgstr "Kullanıcı _Düzenle" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Düzenle" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_PureFTPd" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Kayıtları tekrar oku" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "Karakter Kodlama" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "Grup ve Kullanıcı Varsayılanları" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Kaydediliyor" #: ../prefwin.glade.h:4 msgid "Network" msgstr "AÄŸ" #: ../prefwin.glade.h:5 msgid "Settings" msgstr "Ayarlar" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "kullanıcı Yönetimi" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Gözat..." #: ../prefwin.glade.h:9 msgid "C_ustom" msgstr "_KiÅŸisel" #: ../prefwin.glade.h:10 msgid "Default _password file:" msgstr "Varsayılan _Parola Dosyası:" #: ../prefwin.glade.h:11 msgid "Default pure_db file:" msgstr "Varsayılan pure_db dosyası:" #: ../prefwin.glade.h:12 msgid "External" msgstr "Dış" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "Aktif olduÄŸunda, görev çubuÄŸunda bir ikon görünür (bilindiÄŸi gibi) " #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "" #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "" #: ../prefwin.glade.h:17 msgid "Main" msgstr "" #: ../prefwin.glade.h:18 msgid "Pure-pw _command:" msgstr "" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "" #: ../prefwin.glade.h:21 msgid "S_yslog" msgstr "Sistem Gün_lüğü" #: ../prefwin.glade.h:22 msgid "System _GroupID:" msgstr "Sistem G_rup KimliÄŸi:" #: ../prefwin.glade.h:23 msgid "System _UserID:" msgstr "Sistem K_ullanıcı KimliÄŸi:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" "Bu, yeni kullanıcıların varsayılan baÅŸlangıç dizini olarak belirlenecek" #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "Bu pure-pw komutunun adıdır. Varsayılan dizinden farklı yere kuruldu ise tam " "adresi kullanınız." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "" #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "" #: ../prefwin.glade.h:32 msgid "Username _encoding:" msgstr "" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Gözat..." #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "" #: ../prefwin.glade.h:37 msgid "_Home directory:" msgstr "BaÅŸlangıç _dizini:" #: ../prefwin.glade.h:38 msgid "_Logfile:" msgstr "Günlük d_osyası:" #: ../prefwin.glade.h:39 msgid "_Resolve hostnames" msgstr "_Sunucu isimlerini çöz" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "Sistemi _tara" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "_Seç..." #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 sınırlamayı kaldırır)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "" "(Virgülle ayrılmış deÄŸerler, sınırlama olmaması için boÅŸ bırakın)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "İzin VerilmiÅŸ Yerel IP'ler:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "Parola OluÅŸtur/DeÄŸiÅŸtir..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "ReddedilmiÅŸ İstemci IP'leri:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "ReddedilmiÅŸ Yerel IP'ler:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "" #: ../usermanager.glade.h:21 msgid "Down:" msgstr "AÅŸağı:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "Sahte root:" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "Dosya Oranı:" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "Grup KimliÄŸi:" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "BaÅŸlangıç Dizini:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "" #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "" #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "" #: ../usermanager.glade.h:34 msgid "Password:" msgstr "" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "KiÅŸisel Bilgiler" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "SüperYönetici: Yeni Kullanıcı OluÅŸtur" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "SüperYönetici: Parolayı Giriniz:" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "SüperYönetici: Kullanıcılar" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "" #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "Gerçek İsim:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "Sınırlamalar" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "Parola OluÅŸtur" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Kullanıcının tam adı. " #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "" #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "" #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "" #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "Kullanıcının baÄŸlanabileceÄŸi zaman aralığı. (24 saat format) ÖrneÄŸin: 1830-" "0530" #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "Kullanıcı giriÅŸ yaptığında görebileceÄŸi en üst dizin." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "" #: ../usermanager.glade.h:50 msgid "This is a list of all users with a uid above 100" msgstr "" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "Zamanlanmış sınırlamalar:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Yukarı:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "Sahte root Kullan (Önerilen)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "Kullanıcı KimliÄŸi (ID):" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "Kullanıcı adı:" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Parolayı DoÄŸrulayınız:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "Kullanıcı _Ekle" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "_Yeni Kullanıcı Ekle..." #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "DeÄŸiÅŸiklikleri _İptal Et" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "Kullanıcı _Düzenle" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "Kullanıcı _Sil" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "DeÄŸiÅŸiklikleri _Kaydet" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "FTP Sunucunuzu yönetin ve izleyin" #: ../pureadmin.desktop.in.h:2 msgid "FTP Administration" msgstr "FTP Yönetimi" #~ msgid "[logfile]" #~ msgstr "[Kayıt Dosyası]" #, fuzzy #~ msgid "lbl_elapsed_time" #~ msgstr "Geçen Süre:" #, fuzzy #~ msgid "lbl_remaining_time" #~ msgstr "Kalan süre:" #, fuzzy #~ msgid "lbl_username" #~ msgstr "Kullanıcı adı:" pureadmin-0.4/po/ChangeLog0000644000175000017500000000033510667602724012465 000000000000002005-09-24 Isak Savo * po/: Build system change. Switch to use intltool instead of gettext directly. 2004-11-24 Isak Savo * sv.po: Fixed a type-o pureadmin-0.4/po/ru.po0000644000175000017500000013157510670517374011714 00000000000000# Russian translation for pureadmin # Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 # This file is distributed under the same license as the pureadmin package. # FIRST AUTHOR , 2006. # msgid "" msgstr "" "Project-Id-Version: pureadmin\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2005-11-24 16:55+0100\n" "Last-Translator: Vitaliy Efanov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 msgid "Directory" msgstr "Каталог" #: ../src/dirbrowser.c:155 msgid "The currently selected directory" msgstr "Текущий каталог" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Выбрать каталог" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "" #: ../src/gui_helper.c:208 msgid "PureFTPd running (standalone)" msgstr "PureFTPd запущен (автономно)" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_ОÑтановить Ñервер" #: ../src/gui_helper.c:213 msgid "PureFTPd running (inetd)" msgstr "PureFTPd запущен (inetd)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr "PureFTPd не запущен" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_ЗапуÑтить Ñервер" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "Отправка" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Загрузка" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, fuzzy, c-format msgid "%s of %s (%s%%) %s" msgstr "%s из %s Кб (%s%%) %s" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, fuzzy, c-format msgid "%s at %s" msgstr "%s Кб %s" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "ÐеизвеÑтно" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 msgid "Invalid Unicode" msgstr "ÐедопуÑтимый Unicode" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "ИндекÑ" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "_Введение" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "_ОÑновное окно" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "_Управление пользователÑми" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "_ÐаÑтройки" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: Помощь" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "Выбрать главу:" #: ../src/helpview.c:301 msgid "Help not found" msgstr "Помощь не найдена" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin не Ñмог найти файлы помощи.Возможно переуÑтановка PureAdmin " "поможет решить Ñту проблему." #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "[ПроÑмотр логов Отключен]" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "ПроÑмотр логов был отключен потому-что на Ñтом компьютере не уÑтановлен FAM. " "ЕÑли вы хотите иÑпользовать проÑмотр логов, вам необходимо уÑтановить FAM и " "перекомпилировать PureAdmin.\n" "\n" "Проверьте ваш диÑтрибутив на наличие подходÑщего пакета или поÑетите http://" "oss.sgi.com/projects/fam/ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации о FAM." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "ПроÑмотр логов был отключен потому-что PureAdmin не Ñмог подключитьÑÑ Ðº " "локальному ÑервиÑу FAM.\n" "FAM должен быть запущен либо как отдельный Ñервер либо\n" "через inetd (Internet Super Server) добавлением запиÑи в /etc/inetd.conf.\n" "\n" "Проверьте конфигурацию FAM, еÑли вы хотите иÑпользовать проÑмотр логов." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "ПроÑмотр логов был отключен потому-что PureAdmin не Ñмог открыть открыть " "файл логов.\n" "УбедитеÑÑŒ, что у Ð²Ð°Ñ ÐµÑть права Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° логов." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "ПроÑмотр логов был отключен потому-что PureAdmin не Ñмог проÑмотреть " "Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² файле логов.\n" "УбедитеÑÑŒ, что у Ð²Ð°Ñ ÐµÑть права Ð´Ð»Ñ Ð´Ð¾Ñтупа к файлу логов." #: ../src/main.c:289 msgid "Fetching information about server activity, please wait..." msgstr "Получение информации о активноÑти Ñервера, пожалуйÑта подождите..." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "Ðевозможно получить информации о активноÑти Ñервера." #: ../src/mainwin.c:307 msgid "User" msgstr "Пользователь" #: ../src/mainwin.c:307 msgid "Host" msgstr "ХоÑÑ‚" #: ../src/mainwin.c:307 msgid "Connections" msgstr "СоединениÑ" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 #, fuzzy msgid "downloading" msgstr "Отправка" #: ../src/mainwin.c:504 #, fuzzy msgid "uploading" msgstr "Загрузка" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "Скрипт запуÑка не найден" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin не Ñмог найти Ñкрипт, иÑпользующийÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка и оÑтановки " "Ñервера.\n" "Этот файл должен находитÑÑ Ð² /etc/rc.d/init.d/ в RedHat (и подобных) и /etc/" "rc.d/ в Slackware (и подобных)\n" "ВозможноÑть запуÑка и оÑтановки отключена." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "Ошибка запуÑка Ñервера" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin не Ñмог запуÑтить Ñервер из-за проблем Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ \"%s\".\n" "Было Ñообщено о ошибке: %s" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "Ошибка оÑтановки Ñервера" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin не Ñмог оÑтановить Ñервер из-за проблем Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ \"%s\".\n" "Было Ñообщено о ошибке: %s" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" "Браузер по умолчанию не определён. Ð’Ñ‹ можете решить Ñту проблему Ð´Ð²ÑƒÐ¼Ñ " "ÑпоÑобами:\n" " • УÑтановить переменную Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ $BROWSER в Ð¸Ð¼Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ веб-" "браузера.\n" " • Открыть \"Предпочтительные приложениÑ\" в Панели ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ GNOME и " "уÑтановить браузер там.\n" "\n" "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ð°Ñ Ñтраница:\n" "%s" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "Ðе могу запуÑтить браузер" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" "Браузер не может быть запущен из-за ÑиÑтемной ошибки. Попробуйте Ñнова и, " "еÑли ошибка повторитÑÑ, опишите баг на форумах поддержки.\n" "\n" "Было Ñообщено о ошибке: %s" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "иÑполнÑемый файл pure-pw" #: ../src/prefwin.c:173 msgid "password file" msgstr "файл паролей" #: ../src/prefwin.c:174 msgid "database file" msgstr "файл базы данных" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 msgid "Not Found" msgstr "Ðе найдено" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "ПожалуйÑта выберите %s" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "Выберите домашний каталог по умолчанию" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "Команда 'pure-ftpwho' не найдена. Возможно PureFTPd не уÑтановлен." #: ../src/srv_comm.c:443 msgid "Permission denied" msgstr "ДоÑтуп запрещён" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "" #: ../src/srv_comm.c:456 #, fuzzy, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "Pure-ftpwho аварийно завершилÑÑ: %d. Сообщение: %s" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Ðеправильный виртуальный корень" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "Выбранный вами виртуальный корень находитÑÑ Ð½Ðµ в домашнем каталоге.Это " "значение было определено по умолчанию Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких каталогов." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Ðеправильный домашний каталог" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" "Задан домашний каталог без абÑолютного пути (Ñ‚.е не начинаетÑÑ Ñ '/'). " "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð½Ðµ будет запиÑана." #: ../src/usr_manager.c:274 msgid "Username" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "ÐаÑтоÑщее имÑ" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "Создать файл паролей?" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" "Файл, Ñодержаший аккаунты виртуальных пользователей, не найден.Этот файл " "необходим Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹.\n" "Ð’Ñ‹ хотите Ñоздать Ñтот файл?" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Да, Ñоздать файл" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° паролей [%s].\n" "Было Ñообщено о ошибке: '%s'" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "ДоÑтуп запрещён" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "Ð’Ñ‹ не имеете прав Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в файл паролей." #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Создание пользователеё и групп" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "КажетÑÑ Ñƒ Ð²Ð°Ñ Ð½ÐµÑ‚ выделенных ftp Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ группы.\n" "Ð’Ñ‹ хотите Ñоздать ftpgroup и ftpuser и назначить их по умолчанию Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… " "пользователей." #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Да, Ñоздать аккаунт" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin не Ñмог Ñоздать ÑиÑтемные аккаунты.Ð’Ñ‹ можете Ñоздать их вручную." "ИÑпользуйте подходÑщие утилиты из вашего лиÑтрибутива и прочтите README." "VirtualUsers, находÑщийÑÑ Ð² пакете PureFTPd." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "Удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ '%s'?" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "Полное удаление Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ позволит ему зайти на ваш Ñервер.\n" "Ð’Ñ‹ уверены что хотите удалить Ñтого пользователÑ?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Да, _удалить пользователÑ" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s из файла паролей.Возможно другие " "процеÑÑÑ‹ иÑпользуют Ñтот файл(Ñ‹)." #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ." #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" "Пользователь '%s' не может быть удалён потому-что не найдена программа pure-" "pw. УбедитеÑÑŒ что она уÑтановлена и правильно указана в наÑтройках." #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "Пользователь '%s' не может быть удалён." #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" "Пользователь '%s' не может быть удалён потому-что не ÑущеÑтвует. ЕÑли вы " "уверены что он ÑущеÑтвует, пожалуйÑта ÑвÑжитеÑÑŒ Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð¼ программы и " "опишите ему вашу проблему." #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "Оштбка запиÑи пользователÑ." #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи пользовательÑкой информации. Возможно другие " "процеÑÑÑ‹ заблокировали требуемый файл(Ñ‹).\n" "Попробуйте Ñнова и еÑли не получитÑÑ, пожалуйÑта ÑвÑжитеÑÑŒ Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð¼ " "программы и опишите ему вашу проблему." #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "Ðе найдена программа pure-pw. УбедитеÑÑŒ что она уÑтановлена и правильно " "указана в наÑтройках.\n" #: ../src/usr_manager_cb.c:278 msgid "Long Username" msgstr "Длинное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñодержит более 32 Ñимволов. Это макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° в " "Ñтандартном PureFTPd Ñервере. Хотите продолжить в любом Ñлучае?" #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "Да, иÑпользовать Ñто Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ " #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "Пользователь уже ÑущеÑтвует" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" "Введённое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¶Ðµ ÑущеÑтвует. Ð’Ñ‹ должны выбрать другое имÑ." #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "Ðевозможно добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð·-за отÑутÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð°Ð² Ñделать Ñто. Возможно " "другие процеÑÑÑ‹ заблокировали требуемый файл(Ñ‹)." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "У Ð²Ð°Ñ ÐµÑть неÑÐ¾Ñ…Ñ€Ð°Ð½Ñ‘Ð½Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ." #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "Ð’Ñ‹ изменили информацию о пользователе.\n" "Ð’Ñ‹ хотите Ñначала её Ñохранить?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "Да, _Ñохранить информацию" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "_Отмена" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "Copyright (C) 2003 Isak Savo" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "Выпущено под GNU General Public Licence." #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "ГрафичеÑÐºÐ°Ñ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ð° Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ наÑтройки Pure Ftp Ñервера.\n" "\n" "ДомашнÑÑ Ñтраница PureAdmin: http://purify.sourceforge.net/\n" "ДомашнÑÑ Ñтраница PureFTPd: http://www.pureftpd.org/" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "О PureAdmin" #: ../dialogs.glade.h:12 #, fuzzy msgid "Apply System Changes" msgstr "_ЗапиÑать изменениÑ" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Закрыть _вÑе пользовательÑкие ÑоединениÑ" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Завершить _передачу" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "Закрыть вÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ передачи выбранного пользователÑ" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Закрыть выбранные загрузки." #: ../dialogs.glade.h:17 msgid "Open the user editor and shows the selected users' information" msgstr "Открыть редактор пользователей и показать пользовательÑкую информацию" #: ../dialogs.glade.h:18 msgid "Select Character Encoding" msgstr "Выбрать кодировку" #: ../dialogs.glade.h:19 #, fuzzy msgid "Yes, Apply Changes" msgstr "_Отменить изменениÑ" #: ../dialogs.glade.h:20 msgid "_Don't show this message again" msgstr "_Ðе показывать Ñто Ñообщение в дальнейшем" #: ../dialogs.glade.h:21 msgid "_Filter" msgstr "_Фильтр" #: ../dialogs.glade.h:22 msgid "_Show User Information" msgstr "_Показать пользовательÑкую информацию" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "ДейÑтвие:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Прошло:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "Вывод логфайла" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "Пользователи в Ñети" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "ПрогреÑÑ:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "ОÑталоÑÑŒ:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Удалённый хоÑÑ‚:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "Загрузки и выгрузки" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ:" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "ÐктивноÑть" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "Закрыть _вÑе ÑоединениÑ" #: ../mainwindow.glade.h:13 #, fuzzy msgid "Closes the selected transfer" msgstr "Закрыть выбранные загрузки." #: ../mainwindow.glade.h:14 #, fuzzy msgid "Disconnects the selected user" msgstr "Закрыть вÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ передачи выбранного пользователÑ" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "Файл:" #: ../mainwindow.glade.h:16 msgid "Information about PureAdmin" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ PureAdmin" #: ../mainwindow.glade.h:17 msgid "Lauch PureFTPd server" msgstr "ПроÑмотр PureFTPd Ñервера" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Логирование" #: ../mainwindow.glade.h:20 msgid "Manage Users" msgstr "Управление пользователÑми" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Управление _пользователÑми" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "Управление пользователÑми pureftpd" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "ÐžÐ½Ð»Ð°Ð¹Ð½Ð¾Ð²Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "ÐžÐ½Ð»Ð°Ð¹Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "Открыть конÑоль отладки. Полезно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ошибок." #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "PureAdmin" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "PureAdmin: КонÑоль отладки" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Показать дополнительную информацию" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "Прервать вÑе текущие ÑоединениÑ." #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "ПоÑетите онлайновую документыцию иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€." #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "ПоÑетите форумы поддержки иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€." #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_О" #: ../mainwindow.glade.h:35 #, fuzzy msgid "_Close transfer" msgstr "Завершить _передачу" #: ../mainwindow.glade.h:36 #, fuzzy msgid "_Connections" msgstr "СоединениÑ" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "_КонÑоль отладки" #: ../mainwindow.glade.h:38 #, fuzzy msgid "_Disconnect user" msgstr "_Редактировать пользователÑ" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Правка" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "_Файл" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "_Помощь" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_Сервер" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Перечитать логфайл" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "Кодировка" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "ÐаÑтройки по умолчанию Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и групп" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Лог" #: ../prefwin.glade.h:4 msgid "Network" msgstr "Сеть" #: ../prefwin.glade.h:5 msgid "Settings" msgstr "Параметры" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "Управление пользователÑми" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Открыть..." #: ../prefwin.glade.h:9 msgid "C_ustom" msgstr "Ð’_ыбрать" #: ../prefwin.glade.h:10 msgid "Default _password file:" msgstr "Файл _паролей по умолчанию:" #: ../prefwin.glade.h:11 msgid "Default pure_db file:" msgstr "Файл базы по умолчанию:" #: ../prefwin.glade.h:12 msgid "External" msgstr "Внешний" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "Включите Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÐºÐ¾Ð½ÐºÐ¸ в трее. " #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" "ЕÑли включено, то IP адреÑа преобразуютÑÑ Ð² имена (например www.somehost." "com).Однако преобразование занимает Ð²Ñ€ÐµÐ¼Ñ Ð¸ PureAdmin будет работать " "быÑтрее, еÑли вы не включите Ñту опцию." #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "ЕÑли включено, то PureAdmin запомнит размер и положение главного окна." #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "Метод логированиÑ:" #: ../prefwin.glade.h:17 msgid "Main" msgstr "Главные" #: ../prefwin.glade.h:18 msgid "Pure-pw _command:" msgstr "_Команда pure-pw:" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "PureAdmin: Параметры" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "Помнить _размер и положение окна" #: ../prefwin.glade.h:21 msgid "S_yslog" msgstr "S_yslog" #: ../prefwin.glade.h:22 msgid "System _GroupID:" msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°:" #: ../prefwin.glade.h:23 msgid "System _UserID:" msgstr "СиÑтемный пользователь:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" "Будет иÑпользован Ñтот бинарный файл паролей. Обычно (\"/etc/pureftpd.pdb) " "подходит многим пользователÑм." #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" "Эта домашнÑÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ назначена по умолчанию Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей." #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "РаÑположение программы pure-pw. ИÑпользуйте полный путь, еÑли она " "уÑтановлена не в Ñтандартном каталоге." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" "Будет иÑпользован Ñтот текÑтовый файл паролей. Обычно (\"/etc/pureftpd.passwd" "\") подходит многим пользователÑм." #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" "Эта ÑиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° будет назначена по умолчанию Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей." #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" "Этот ÑиÑтемный пользователь будет назначен по умолчанию Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… " "пользователей." #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "Ðайти в ÑиÑтеме внешние файлы и программы." #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "ИÑпользовать ÑиÑтемную кодировку" #: ../prefwin.glade.h:32 msgid "Username _encoding:" msgstr "Кодировка _имени пользователÑ:" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "Виртуальные пользователи" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" "Ð’Ñ‹ не должны иÑпользовать не ASCII Ñимволы в именах пользователей.ЕÑли вы их " "иÑпользуете, убедитеÑÑŒ что FTP-клиенты ваших пользователей их понимают." #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Ðайти..." #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "_Включить Ð¸Ð·Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² ÑиÑтемном трее." #: ../prefwin.glade.h:37 msgid "_Home directory:" msgstr "_Домашний каталог:" #: ../prefwin.glade.h:38 msgid "_Logfile:" msgstr "_Логфайл:" #: ../prefwin.glade.h:39 msgid "_Resolve hostnames" msgstr "_Получать имена:" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "_Ðайти в ÑиÑтеме" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "_Выбрать..." #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 Ñнимает ограничениÑ)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "" "(ИÑпользуйте запÑтую как разделитель,оÑтавьте пуÑтым Ð´Ð»Ñ ÑнÑÑ‚Ð¸Ñ " "ограничений)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "(Кб/Ñ)" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "(Мб)" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "Ðеверный пользователь" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" "Виртуальные пользователи, ÑущеÑтвующие только в PureFTP. Другие " "пользователи (Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ñ‹Ð¼Ð¸ аккаунтами) также могут входить в завиÑимоÑти " "от наÑтроек Ñервера." #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" "ВвеÑти информацию о пользователе\n" "\n" "Введите необходимые данные Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ. " #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" "Задать пароль\n" "\n" "Введите пароль Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ." #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "Разрешить IP клиента:" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "Разрешить IP локальные:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "Изменить/УÑтановить пароль..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "Запретить IP клиента:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "Запретить IP локальные:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ñ€Ð¸ входе. По умолчанию Ñовпадает Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð¹." #: ../usermanager.glade.h:21 msgid "Down:" msgstr "Вниз:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "Виртуальный корень:" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "Отношение загрузок:" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "Группа:" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "Домашний каталог:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" "ЕÑли включено, то пользователь не Ñможет Ñмотреть файлы в других каталогах, " "кромеÑвоего." #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑть:" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "МакÑимально файлов:" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "МакÑимальный размер:" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "Одновременно подключений:" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "МакÑимальное чиÑло одновременных подключений Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ." #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑть Ñкачки" #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑть закачки" #: ../usermanager.glade.h:34 msgid "Password:" msgstr "Пароль:" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "Ð›Ð¸Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "PureAdmin: Создать нового пользователÑ" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "PureAdmin: Задать пароль" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "PureAdmin: Пользователи" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "Отношение закачки/Ñкачки Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ." #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "ÐаÑтоÑщее имÑ:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "ОграничениÑ" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "Задать пароль" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Полное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ. " #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "МакÑимальный Ñуммарный размер пользовательÑких файлов." #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "МакÑимальное количеÑтво пользовательÑких файлов." #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°" #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "ВремÑ, в течении которого пользователь может входить на Ñервер (Формат 24 " "чаÑа). Ðапример: 1830-0530" #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "Верхний каталог, который пользователь может проÑматривать." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "СпиÑок вÑех найденных групп Ñ GID выше 100" #: ../usermanager.glade.h:50 msgid "This is a list of all users with a uid above 100" msgstr "СпиÑок вÑех найденных пользователей Ñ UID выше 100" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "Ограничение по времени:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Вверх:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "ИÑпользовать виртуальный корень(РекомендуетÑÑ)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "Идентификатор пользователÑ:" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ:" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Повтор паролÑ:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "_Добавить пользователÑ" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "_Добавить нового пользователÑ" #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "_Отменить изменениÑ" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "_Редактировать пользователÑ" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "_Удалить пользователÑ" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "_ЗапиÑать изменениÑ" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "ÐдминиÑтрирование и мониторинг вашего FTP Ñервера" #: ../pureadmin.desktop.in.h:2 msgid "FTP Administration" msgstr "ÐдминиÑтрирование FTP" #~ msgid "[logfile]" #~ msgstr "[логфайл]" #, fuzzy #~ msgid "lbl_elapsed_time" #~ msgstr "Прошло:" #, fuzzy #~ msgid "lbl_remaining_time" #~ msgstr "ОÑталоÑÑŒ:" #, fuzzy #~ msgid "lbl_username" #~ msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" pureadmin-0.4/po/cs.po0000644000175000017500000011615510670517373011667 00000000000000# Czech translation for pureadmin # Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 # This file is distributed under the same license as the pureadmin package. # FIRST AUTHOR , 2006. # msgid "" msgstr "" "Project-Id-Version: pureadmin\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2006-04-12 18:41+0000\n" "Last-Translator: Marv \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 msgid "Directory" msgstr "Adresář" #: ../src/dirbrowser.c:155 msgid "The currently selected directory" msgstr "AktuálnÄ› vybraný adresář" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Vybrat adresář" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "" #: ../src/gui_helper.c:208 msgid "PureFTPd running (standalone)" msgstr "PureFTPd běží (samostaný démon)" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_Zastavit server" #: ../src/gui_helper.c:213 msgid "PureFTPd running (inetd)" msgstr "PureFTPd běží (pod superdémonem inetd)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr "PureFTPd neběží" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_Spustit server" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "Stahování ze serveru" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Nahrávání na server" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, fuzzy, c-format msgid "%s of %s (%s%%) %s" msgstr "%s z %s Kb (%s%%) %s" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, fuzzy, c-format msgid "%s at %s" msgstr "%s Kb %s" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "Neznámý" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 msgid "Invalid Unicode" msgstr "Neplatný Unikód" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "_Rejstřík" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "Ú_vod" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "_Hlavní okno" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "Správce uživatelů" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "PÅ™edvolby" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: NápovÄ›da" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "VýbÄ›r kapitoly:" #: ../src/helpview.c:301 msgid "Help not found" msgstr "NápovÄ›da nenalezena" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin nemůže najít žádný soubor s nápovÄ›dou. Zkuste PureAdmin " "pÅ™einstalovat, možná to problém vyÅ™eší." #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "[ProhlížeÄ záznamů zakázaný]" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "ProhlížeÄ záznamů byl zakázaný, protože na VaÅ¡em poÄítaÄi není nainstalovaný " "FAM. Pokud chcete prohlížeÄ záznamů použít, je zapotÅ™ebí FAM nainstalovat a " "znovu pÅ™eložit PureAdmin\n" "\n" "Podívejte se, zda je ve vaší distribuci k dispozici přísluÅ¡ný balíÄek nebo " "navÅ¡tivte http://oss.sgi.com/projects/fam/ pro více informací o FAM." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "ProhlížeÄ záznamů byl zakázaný, protože PureAdmin se nemůže pÅ™ipojit k " "místní službÄ› FAM.\n" "FAM je nainstalovaný, proto by bylo jeÅ¡tÄ› vhodné je spousti buÄ jako " "samostatný server nebo pod superdémonem inetd (pomocí úpravy v /etc/inetd." "conf).\n" "\n" "Pokud chcete používat prohlížeÄ záznamů, zkontrolujte VaÅ¡e nastavení FAM." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "ProhlížeÄ záznamů byl zakázán, protože PureAdmin nemůže otevřít zadaný " "sobour se záznamy.\n" "UjistÄ›te se, že spouÅ¡títe PureAdmin jako uživatel s oprávnÄ›ním otevřít " "soubor se záznamy." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "ProhlížeÄ záznamů byl zakázán, protože PureAdmin nemůže Äíst zadaný sobour " "se záznamy.\n" "UjistÄ›te se, že spouÅ¡títe PureAdmin jako uživatel s oprávnÄ›ním Äíst soubor " "se záznamy." #: ../src/main.c:289 msgid "Fetching information about server activity, please wait..." msgstr "Získávám informace o Äinnosti serveru, Äekejte prosím..." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "Nelze získat informace o Äinnosti serveru." #: ../src/mainwin.c:307 msgid "User" msgstr "Uživatel" #: ../src/mainwin.c:307 msgid "Host" msgstr "Hostitel" #: ../src/mainwin.c:307 msgid "Connections" msgstr "PÅ™ipojení" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 #, fuzzy msgid "downloading" msgstr "Stahování ze serveru" #: ../src/mainwin.c:504 #, fuzzy msgid "uploading" msgstr "Nahrávání na server" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "Startovací skript nebyl nalezen" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin nemůže najít skript používaný pro spuÅ¡tÄ›ní a zastavení serveru.\n" "Tento soubor by mÄ›l být umístÄ›n v /etc/rc.d/init.d/ (u distribucí založených " "na RedHatu) nebo v /etc/rc.d/ (u distribucí založených na Slackware) nebo v /" "etc/init.d/ (u distribucí založených na Debianu)\n" "SpouÅ¡tÄ›ní a zastavování serveru je zakázané." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "NezdaÅ™ilo se spustit server" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin nemůže spustit server protože spuÅ¡tÄ›ní \"%s\" se nezdaÅ™ilo.\n" "Oznámená chyba byla: %s" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "NezdaÅ™ilo se zastavit server" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin nemůže zastavit server protože spuÅ¡tÄ›ní \"%s\" se nezdaÅ™ilo.\n" "Oznámená chyba byla: %s" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" "Nelze nalézt výchozí prohlížeÄ. Můžete to Å™eÅ¡it následovnÄ›:\n" " Nastavením promÄ›nné prostÅ™edí $BROWSER na název vaÅ¡eho webového " "prohlížeÄe.\n" " Otevřít \"Preferované aplikace\" v ovládacím panelu GNOME a nastavit " "prohlížeÄ tam.\n" "\n" "Požadovaná stránka je:\n" "%s" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "Nemohu spustit prohlížeÄ" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" "Kvůli systémové chybÄ› nemohl být spuÅ¡tÄ›n webový prohlížeÄ. Zkuste to jeÅ¡tÄ› " "jednou a pokud se bude chyba opakovat, oznamte ji na fóru podpory.\n" "\n" "Oznámená chyba byla: %s" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "spustitelný pomocí pure-pw" #: ../src/prefwin.c:173 msgid "password file" msgstr "soubor s hesly" #: ../src/prefwin.c:174 msgid "database file" msgstr "databázový soubor" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 msgid "Not Found" msgstr "Nenalezeno" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "Zvolte prosím %s" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "VýbÄ›r výchozího domovského adresáře" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "" "Příkaz \"pure-ftpwho\" nebyl nalezen. PureFTPd není pravdÄ›podobnÄ› " "nainstalovaný." #: ../src/srv_comm.c:443 msgid "Permission denied" msgstr "Přístup odepÅ™en" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "" #: ../src/srv_comm.c:456 #, fuzzy, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "Pure-ftpwho byl ukonÄen nesprávnÄ›: %d. Výstup byl: %s" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Neplatný faleÅ¡ný koÅ™en" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "Vámi zadaný faleÅ¡ný koÅ™enový adresář není Äástí domovského adresáře. Údaj " "bude zmÄ›nÄ›n na domovský adresář." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Neplatný domovský adresář" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" "Vámi zadaný domovský adresář není absolutní (tj. cesta nezaÄíná \"/\"). " "Informace nemůže být uložena." #: ../src/usr_manager.c:274 msgid "Username" msgstr "Uživatelské jméno" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "SkuteÄné jméno" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "VytvoÅ™it soubor s hesly?" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" "Nebyl nalezen soubor s pÅ™ihlaÅ¡ovacími jmény virtuálních uživatelů. Abyste " "mohli uživatele upravovat, musíte soubor nejdříve vytvoÅ™it.\n" "PÅ™ejete si tento soubor vytvoÅ™it?" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Ano, vytvoÅ™it soubor" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "Vyskytla se chyba pÅ™i pokusu vytvoÅ™it soubor s hesly [%s].\n" "Oznámená chyba byla: \"%s\"" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "VytvoÅ™ení souboru se nezdaÅ™ilo" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "Přístup odepÅ™en" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "" "Nemáte oprávnÄ›ní Äíst a zapisovat do souboru s hesly. PravdÄ›podobnÄ› to " "znamená, že musíte spustit PureAdmin jako správce root, aby jste byli " "schopni spravovat VaÅ¡e uživatele." #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Vytváření uživatelů a skupin" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "Zdá se, že nemáte vyhrazeného ftp-uživatele a ftp-skupinu pro použití s FTP " "uživateli.\n" "Chcete vytvoÅ™it ftpgroup a ftpuser a pÅ™iÅ™adit je jako výchozí pro nové " "uživatele?" #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Ano, vytvoÅ™it úÄet" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "VytvoÅ™ení úÄetu se nezdaÅ™ilo" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin nemohl vytvoÅ™it systémový úÄet. Budete jej muset vytvoÅ™it ruÄnÄ›. " "Použijte přísluÅ¡né nástroje ve Vaší distribuci a proÄtÄ›te si soubor README." "VirtualUsers, který je souÄástí balíÄku PureFTPd." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "Vymazat uživatele \"%s\"?" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "Nevratné vymazání uživatele z pureftpd mu nebo jí znemožní pÅ™ihlášení k " "vaÅ¡emu serveru.\n" "Jste si jistí, že chcete uživatele vymazat?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Ano, _vymazat uživatele" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" "Nemáte oprávnÄ›ní vymazat uživatele %s ze souboru hesel. Může to být tím, že " "jiný proces pÅ™istupuje k tomuto souboru." #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "Chyba pÅ™i mazání uživatele." #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" "Uživatel \"%s\" nemůže být vymazán, protože příkaz pure-pw nebyl nalezen. " "UjistÄ›te se, že je nainstalovaný a nastavní odkazuje na správný soubor." #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "Uživatel \"%s\" nemůže být vymazán." #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" "Uživatel \"%s\" nemůže být vymazán, protože neexistuje. Pokud jste si jistí, " "že existuje, kontaktujte prosím autora tohoto programu s popisem problému." #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "Chyba pÅ™i ukládání uživatele." #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" "Nemáte oprávnÄ›ní uložit informace o uživateli. Může to být proto, že jiný " "proces pÅ™istupuje k požadovaným souborům.\n" "Můžete to zkusit znovu a pokud to stále nepůjde, kontaktujte prosím autora s " "popisem VaÅ¡eho problému." #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "Příkaz pure-pw nebyl nalezen. UjistÄ›te se, že je nainstalovaný a nastavení " "se odkazuje na správný soubor.\n" #: ../src/usr_manager_cb.c:278 msgid "Long Username" msgstr "Celé jméno uživatele" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" "Vámi zadané uživatelské jméno má více než 32 znaků, což je normálnÄ› " "maximální délka u standardního PureFTPd serveru. PÅ™ejete si pokraÄovat dále " "s takovýmto uživatelským jménem." #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "Ano, použít toto uživatelské jméno " #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "Uživatel již existuje" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" "Vámi zadané uživatelské jméno již existuje v PureFTPd. Musíte pro " "pÅ™ihlaÅ¡ování zvolit jiné jméno." #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "PÅ™idání uživatele se nezdaÅ™ilo" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "Nemůžete pÅ™idat uživatele, protože nemáte dostateÄná oprávnÄ›ní. Mohlo by to " "být tím, že jiný proces pÅ™istupuje k potÅ™ebným souborům." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "Máte neuložené info." #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "PrávÄ› upravujete informace o uživateli.\n" "PÅ™ejete si tyto informace nejdříve uložit?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "Ano, _uložit Info" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "_Storno" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "" "Copyright (C) 2003 Isak Savo, Äeský pÅ™eklad Marv" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "" "Vydáno pod licencí GNU General Public Licence." #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "Grafický nástroj pro nastavení a správu Pure FTP serveru.\n" "\n" "Webové stránky PureAdmin: http://purify.sourceforge.net/\n" "Webové stránky PureFTPd: http://www.pureftpd.org/" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "O PureAdmin" #: ../dialogs.glade.h:12 #, fuzzy msgid "Apply System Changes" msgstr "_Uložit zmÄ›ny" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Uzavřít _vÅ¡echna pÅ™ipojení uživatelů" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Uzavřít _PÅ™enosy" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "Uzavřít vÅ¡echna pÅ™ipojení a pÅ™enosy vybraného uživatele" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Uzavřít vybraná stahování a odesílání" #: ../dialogs.glade.h:17 msgid "Open the user editor and shows the selected users' information" msgstr "Otevřít editor uživatelů a zobrazit informace o vybraném uživateli" #: ../dialogs.glade.h:18 msgid "Select Character Encoding" msgstr "VýbÄ›r kódování znaků" #: ../dialogs.glade.h:19 #, fuzzy msgid "Yes, Apply Changes" msgstr "_Stornovat zmÄ›ny" #: ../dialogs.glade.h:20 msgid "_Don't show this message again" msgstr "_Tuto zprávu již znovu nezobrazovat" #: ../dialogs.glade.h:21 msgid "_Filter" msgstr "_Filtr" #: ../dialogs.glade.h:22 msgid "_Show User Information" msgstr "_Zobrazit informace o uživateli" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "Akce:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Uplynulý Äas:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "Výstup souboru záznamů" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "PÅ™ihlášení uživatelé" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "PrůbÄ›h:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "Zbývající Äas:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Vzdálený hostitel:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "Odesílání a stahování" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "Uživatelské jméno:" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "ÄŒinnost" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "Zavřít _vÅ¡echna pÅ™ipojení" #: ../mainwindow.glade.h:13 #, fuzzy msgid "Closes the selected transfer" msgstr "Uzavřít vybraná stahování a odesílání" #: ../mainwindow.glade.h:14 #, fuzzy msgid "Disconnects the selected user" msgstr "Uzavřít vÅ¡echna pÅ™ipojení a pÅ™enosy vybraného uživatele" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "Soubor:" #: ../mainwindow.glade.h:16 msgid "Information about PureAdmin" msgstr "Informace o PureAdmin" #: ../mainwindow.glade.h:17 msgid "Lauch PureFTPd server" msgstr "Spustit PureFTPd server" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Zaznamenávání" #: ../mainwindow.glade.h:20 msgid "Manage Users" msgstr "Spravovat uživatele" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Spravovat _uživatele" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "Spravovat uživatele pureftpd" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "Online dokumentace" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "Online podpora" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "Ukázat ladící konzolu. Vhodné pro případ, že chcete nahlásit chybu." #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "PureAdmin" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "PureAdmin: Ladící konzola" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Ukázat pokroÄilé informace" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "UkonÄí vÅ¡echna souÄasnÄ› otevÅ™ená pÅ™ipojení." #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "" "NavÅ¡tívit on-line dokumentaci k PureAdmin s použitím webového prohlížeÄe." #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "NavÅ¡tívit fórum podpory PureAdmin s použitím webového prohlížeÄe." #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_O aplikaci" #: ../mainwindow.glade.h:35 #, fuzzy msgid "_Close transfer" msgstr "Uzavřít _PÅ™enosy" #: ../mainwindow.glade.h:36 #, fuzzy msgid "_Connections" msgstr "PÅ™ipojení" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "_Ladící konzola" #: ../mainwindow.glade.h:38 #, fuzzy msgid "_Disconnect user" msgstr "_Upravit uživatele" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Upravit" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "_Soubor" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "Nápo_vÄ›da" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_PureFTPd" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Znovu naÄíst záznamy" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "Kódování znaků" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "Výchozí údaje skupiny a uživatele" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Zaznamenávání" #: ../prefwin.glade.h:4 msgid "Network" msgstr "Síť" #: ../prefwin.glade.h:5 msgid "Settings" msgstr "Nastavení" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "Uživatelská správa" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Procházet..." #: ../prefwin.glade.h:9 msgid "C_ustom" msgstr "_Vlastní" #: ../prefwin.glade.h:10 msgid "Default _password file:" msgstr "Výchozí soubor s hesly:" #: ../prefwin.glade.h:11 msgid "Default pure_db file:" msgstr "Výchozí soubor pure_db:" #: ../prefwin.glade.h:12 msgid "External" msgstr "Externí" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "" "Pokud je povolené, zobrazí se ikona na systémovém panelu (známé také jako " #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" "Pokud je povolené, IP adresy se budou pÅ™evádÄ›t na logická jména (napÅ™. www." "nejakypocitac.cz). PÅ™evod ale zabírá urÄitý Äas a PureAdmin bude rychleji " "reagovat, pokud tuto volbu necháte nezatrženou." #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "" "Pokud je povolené, PureAdmin si bude pamatovat velikost a pozici hlavního " "okna." #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "Způsob záznamů:" #: ../prefwin.glade.h:17 msgid "Main" msgstr "Hlavní" #: ../prefwin.glade.h:18 msgid "Pure-pw _command:" msgstr "Příkaz pure-pw:" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "PureAdmin: PÅ™edvolby" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "Pamatovat velikost a polohu o_kna" #: ../prefwin.glade.h:21 msgid "S_yslog" msgstr "_Systémový záznam" #: ../prefwin.glade.h:22 msgid "System _GroupID:" msgstr "Systémové ID skupiny:" #: ../prefwin.glade.h:23 msgid "System _UserID:" msgstr "Systémové ID uživatele:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" "Toto je binání soubor s hesly, který by se mÄ›l použít. Pro vÄ›tÅ¡inu uživatelů " "by mÄ›l vyhovovat výchozí (\"/etc/pureftpd.pdb\")." #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" "Toto je domovský adresář, který bude pÅ™iÅ™azen jako výchozí novým uživatelům." #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "Toto je název příkazu pure-pw. Pokud je nestandardnÄ› nainstalovaný, použijte " "plnou cestu." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" "Toto je ÄistÄ› textový soubor s hesly, který by se mÄ›l použít. Pro vÄ›tÅ¡inu " "uživatelů by mÄ›l vyhovovat výchozí (\"/etc/pureftpd.passwd\")." #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" "Toto je systémové ID skupiny, které bude pÅ™iÅ™azené jako výchozí novým " "uživatelům." #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" "Toto je systémové ID uživatele, které bude pÅ™iÅ™azené jako výchozí novým " "uživatelům." #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "Tímto se zkusí vyhledat v systému externí soubory a příkazy." #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "Použít kódování systému" #: ../prefwin.glade.h:32 msgid "Username _encoding:" msgstr "Kódování jmen uživatelů:" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "Virtuální uživatelé" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" "MÄ›li byste se vyvarovat používání ne-ASCII znaků (napÅ™. s diakritikou) v " "uživatelských jménech. Pokud už je použijete, ujistÄ›te se, že stejné " "kódování zvládají i FTP klienti návÅ¡tÄ›vníků." #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Procházet" #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "_Povolit oznamování na systémovém panelu" #: ../prefwin.glade.h:37 msgid "_Home directory:" msgstr "_Domovský adresář:" #: ../prefwin.glade.h:38 msgid "_Logfile:" msgstr "Soubor záznamů:" #: ../prefwin.glade.h:39 msgid "_Resolve hostnames" msgstr "PÅ™_eložit jména hostitelů" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "_Prohledat systém" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "Vy_brat..." #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 zakáže omezení)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "" "(Čárkami oddÄ›lený seznam, ponechte prázdné, pokud nejsou žádná omezení)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "(Kb/s)" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "(Mb)" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "Neplatné GID" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "Neplatné UID" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" "Uživatelé zde jsou \"virtuální uživatelé\" a existují jen pro PureFTP. " "Ostatní uživatelé (jako napÅ™. běžné úÄty) mohou mít také povolené " "pÅ™ihlášení, záleží na nastavení VaÅ¡eho serveru." #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" "Vložit informace o uživateli\n" "\n" "Vložte prosím požadované detaily o vytvářeném uživateli. " #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" "Nastavení hesla\n" "\n" "Vložte heslo, které si pÅ™ejete uživateli nastavit." #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "Povolené IP adresy klientů:" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "Povolené místní IP adresy:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "ZmÄ›nit/nastavit heslo..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "Zakázané IP adresy klientů:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "Zakázané místní IP adresy:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "" "Adresář, do kterého bude uživatel po pÅ™ihlášení pÅ™epnut. Ve výchozím " "nastavení je domovský adresář zároveň i nejvyšší (koÅ™enový) adresář." #: ../usermanager.glade.h:21 msgid "Down:" msgstr "Stahování:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "FaleÅ¡ný koÅ™en:" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "Podíl souborů:" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "ID skupiny:" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "Domovský adresář:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" "Pokud je zapnuté, uživatel nebude moci procházet soubor jinde než ve " "faleÅ¡ném koÅ™enovém adresáři a jeho podadresářích." #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "Maximální šířka pásma:" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "Maximum souborů:" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "Maximální velikost:" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "Maximum souÄ. sezení:" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "Maximální poÄet souÄasných pÅ™ipojení tímto vybraným uživatelem." #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "Maximální rychlost stahování ze serveru pro tohoto uživatele" #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "Maximální rychlost nahrávání na server od tohoto uživatele" #: ../usermanager.glade.h:34 msgid "Password:" msgstr "Heslo:" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "Osobní informace" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "PureAdmin: VytvoÅ™it nového uživatele" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "PureAdmin: Zadat heslo" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "PureAdmin: Uživatelé" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "" "PomÄ›r mezi soubory nahranými na server a staženými ze serveru jedním " "uživatelem." #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "SkuteÄné jméno:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "Omezení" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "Nastavení hesla" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Plné jméno uživatele. " #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "" "Maximální velikost souboru vlastnÄ›ného kdykoliv tímto vybraným uživatelem" #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "Maximální poÄet souborů vlastnÄ›ných tímto vybraným uživatelem." #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "Jméno, které uživatel používá pro pÅ™ihlášení" #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "ÄŒasový rozsah, ve kterém se uživatel může pÅ™ihlásit (24h formát). Příklad: " "1830-0530" #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "" "Toto je nejvyšší adresář, ve kterém se může uživatel po pÅ™ihlášení pohybovat." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "Toto je seznam vÅ¡ech nalezených skupin s GID vyšším než 100" #: ../usermanager.glade.h:50 msgid "This is a list of all users with a uid above 100" msgstr "Toto je seznam vÅ¡ech uživatelů s UID vyšším než 100" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "ÄŒasová omezení:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Nahrávání:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "Použít faleÅ¡ný koÅ™en (doporuÄeno)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "ID uživatele:" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "Jméno uživatele:" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Ověření hesla:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "_PÅ™idat uživatele" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "_PÅ™idat nového uživatele..." #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "_Stornovat zmÄ›ny" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "_Upravit uživatele" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "_Vymazat uživatele" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "_Uložit zmÄ›ny" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "Správa a sledování vaÅ¡eho FTP serveru" #: ../pureadmin.desktop.in.h:2 msgid "FTP Administration" msgstr "Správa FTP" #~ msgid "[logfile]" #~ msgstr "[soubor záznamů]" #, fuzzy #~ msgid "lbl_elapsed_time" #~ msgstr "Uplynulý Äas:" #, fuzzy #~ msgid "lbl_remaining_time" #~ msgstr "Zbývající Äas:" #, fuzzy #~ msgid "lbl_username" #~ msgstr "Uživatelské jméno" pureadmin-0.4/po/sv.po0000644000175000017500000011541210670517616011705 00000000000000# PureAdmin Swedish translation # Copyright (C) 2003-2005 Isak Savo # This file is distributed under the same license as the PureAdmin package. # Isak Savo , 2004. # msgid "" msgstr "" "Project-Id-Version: PureAdmin 0.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2004-06-11 13:04+0100\n" "Last-Translator: Isak Savo \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 msgid "Directory" msgstr "Katalog" #: ../src/dirbrowser.c:155 msgid "The currently selected directory" msgstr "Den valda katalogen" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Välj katalog" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "GiB" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "MiB" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "KiB" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "GiB/s" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "MiB/s" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "KiB/s" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "0 b/s (stannad)" #: ../src/gui_helper.c:208 msgid "PureFTPd running (standalone)" msgstr "PureFTPd körs (\"standalone\")" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_Stanna servern" #: ../src/gui_helper.c:213 msgid "PureFTPd running (inetd)" msgstr "PureFTPd körs (inetd)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr "PureFTPd körs inte" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_Starta servern" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "Laddar ner" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Laddar upp" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, c-format msgid "%s of %s (%s%%) %s" msgstr "%s av %s (%s%%) %s" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, c-format msgid "%s at %s" msgstr "%s med %s" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "Okänt" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 msgid "Invalid Unicode" msgstr "Felaktig Unicode" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "Inde_x" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "_Introduktion" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "_Huvudfönster" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "_Användarhanteraren" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "_Inställningar" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: Hjälp" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "Välj kapitel:" #: ../src/helpview.c:301 msgid "Help not found" msgstr "Hjälpfilen hittades inte" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin kunde inte hitta hjälpfilerna. Pröva att installera om PureAdmin " "för att se om det löser problemet." #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "[Loggfilsvisare inaktiverad]" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "Loggfilsvisaren har inaktiverats pÃ¥ grund av att FAM inte är installerad pÃ¥ " "den här datorn. Om du vill använda loggfilsvisaren sÃ¥ mÃ¥ste du installera " "FAM och kompilera om PureAdmin\n" "\n" "Kontrollera med din distribution efter lämpliga paket eller gÃ¥ till http://" "oss.sgi.com/projects/fam för mer information om FAM." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "Loggfilsvisaren har inaktiverats pÃ¥ grund av att PureAdmin inte kunde " "ansluta till den lokala FAM servern.\n" "FAM är installerad sÃ¥ det borde räcka med att antingen starta FAM som en " "separat server eller köra den frÃ¥n\n" "inetd (Internet Super Server) genom att lägga till ett fält i /etc/inetd." "conf.\n" "\n" "Kontrollera dina inställningar för FAM om du vill använda loggfilsvisaren." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "Loggfilsvisaren har inaktiverats pÃ¥ grund av att PureAdmin inte kunde öppna " "den valda loggfilen.\n" "Verifiera att du kör PureAdmin som en användare som har rättigheter att " "öppna loggfilen." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "Loggfilsvisaren har inaktiverats pÃ¥ grund av att PureAdmin inte kunde " "övervaka loggfilen efter ändringar.\n" "Verifiera att du kör PureAdmin som en användare som har rättigheter att " "öppna loggfilen." #: ../src/main.c:289 msgid "Fetching information about server activity, please wait..." msgstr "Hämtar information om serveraktiviteter, var god vänta..." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "Kunde inte hämta information om serveraktiviteter." #: ../src/mainwin.c:307 msgid "User" msgstr "Användare" #: ../src/mainwin.c:307 msgid "Host" msgstr "Värd" #: ../src/mainwin.c:307 msgid "Connections" msgstr "Anslutningar" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 msgid "downloading" msgstr "laddar ner" #: ../src/mainwin.c:504 msgid "uploading" msgstr "laddar upp" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "FTP-aktiviteten färdig" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "Startskriptet kunde inte hittas" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin kunde inte hitta scriptet som startar och stoppar servern.\n" "Den filen brukar finnas i /etc/rc.d/init.d pÃ¥ RedHat (och liknande) och /etc/" "rc.d/ pÃ¥ Slackware (och liknande)\n" "Start och stopp av server är inaktiverat." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "Misslyckades med start av server" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin kunde inte starta servern pÃ¥ grund av att körningen av \"%s\" " "misslyckades.\n" "Felet som rapporterades var: %s" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "Misslyckades med stopp av server" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin kunde inte stoppa servern pÃ¥ grund av att körningen av \"%s\" " "misslyckades.\n" "Felet som rapporterades var: %s" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "Koppla ner användaren" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" "Standardwebbläsaren kunde inte hittas. Du kan lösa det här problemet genom " "att:\n" " • Sätta miljövariabeln $BROWSER till den rätta webbläsaren.\n" " • Öppna \"Föredragna Program\" i GNOMEs kontrollpanel och ange webbläsaren " "där\n" "\n" "Den begärda adressen är:\n" "%s" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "Kunde inte starta webbläsaren" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" "Webbläsaren kunde inte startas pÃ¥ grund av ett systemfel. Försök igen och om " "problemet kvarstÃ¥r sÃ¥ bör du rapportera felet i supportforumet.\n" "\n" "Felet som rapporterades var: %s" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "pure-pw binärfil" #: ../src/prefwin.c:173 msgid "password file" msgstr "lösenordsfil" #: ../src/prefwin.c:174 msgid "database file" msgstr "databasfil" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 msgid "Not Found" msgstr "Hittades inte" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "Välj %s" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "Välj standardhemkatalog" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "" "Kommandot \"pure-ftpwho\" kunde inte hittas. Troligvis är inte PureFTPd " "installerat" #: ../src/srv_comm.c:443 msgid "Permission denied" msgstr "Ã…tkomst nekad" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "Resursen kan inte nÃ¥s för tillfället" #: ../src/srv_comm.c:456 #, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "Pure-ftpwho avslutades onormalt: %d. Utskriften var: \"%s\" och \"%s\"" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Felaktig lÃ¥tsasrot" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "LÃ¥tsasroten som du har valt är inte en del av hemkatalogen. Värdet har " "ändrats till användarens hemkatalog." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Felaktig hemkatalog" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" "Hemkatalogen som du har angett är inte en fullständig sökväg (dvs den börjar " "inte med en '/'). Informationen kunde inte sparas" #: ../src/usr_manager.c:274 msgid "Username" msgstr "Användarnamn" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "Riktigt namn" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "Skapa lösenordsfil?" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" "Filen som innehÃ¥ller användarnamn för virtuella användare kunde inte hittas. " "Du behöber den filen för att kunna skapa och ändra ftpanvändare.\n" "Vill du skapa den filen?" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Ja, skapa filen" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "Det uppstod ett fel när lösenordsfilen [%s] skulle skapas.\n" "Det rapporterade felet var: '%s'" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "Filen kunde inte skapas" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "Ã…tkomst nekad" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "" "Du har inte tillÃ¥telse att läsa och skriva till lösenordsfilen. Detta " "betyder troligtvis att du mÃ¥ste köra PureAdmin som root innan du kan " "administrera dina användare" #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Skapa användare och grupp" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "Det verkar som om du inte har en tillägnad ftp-användare och -grupp att " "användas med de virtuella ftp-användarna.\n" "Vill du skapa ftpgroup och ftpuser och sätta dom som standard för nya " "användare?" #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Ja, skapa konton" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "Skapande av konton misslyckades" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin kunde inte skapa systemkontona. Du mÃ¥ste skapa dem manuellt. " "Använd de verktyg som följde med din distribution och läs README." "VirtualUsers som följer med PureFTPd paketet." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "Ta bort användaren '%s'?" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "Detta kommer att ta bort den valda användaren frÃ¥n pureftpd och sÃ¥ledes neka " "honom eller henne att logga in pÃ¥ din server.\n" "Är du säker pÃ¥ att du vill ta bort användaren?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Ja, _Ta bort användaren" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" "Du har inte rättigheter att ta bort användaren %s frÃ¥n lösenordsfilen. Detta " "kan bero pÃ¥ att nÃ¥got annat program använder filen/filerna." #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "Fel vid borttagning" #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" "Användaren '%s' kunde inte tas bort eftersom kommandot 'pure-pw' inte kunde " "hittas. Kontrollera att det är installerat och att dina inställningar " "hänvisar till rätt program." #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "Användaren '%s' kunde inte tas bort." #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" "Användaren '%s' kunde inte tas bort eftersom den inte finns. Om du är säker " "pÃ¥ att användaren existerar sÃ¥ bör du ta kontakt med personen som har " "skrivit programmet. Bifoga en beskrivning av problemet." #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "Fel vid sparning" #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" "Du har inte rättigheter att spara användarinformationen. Detta kan bero pÃ¥ " "att nÃ¥got annat program använder använder filen/filerna.\n" "Du kan försöka igen och om det inte fungerar sÃ¥ bör du ta kontakt med " "personen som har skrivit programmet." #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "Programmet pure-pw kunde inte hittas. Kontrollera att programmet är " "installerat och att dina inställningar hänvisar till rätt fil,\n" #: ../src/usr_manager_cb.c:278 msgid "Long Username" msgstr "LÃ¥ngt användarnamn" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" "Användarnamnet du angav innehÃ¥ller mer än 32 tecken. Detta är normalt det " "längsta du kan ha pÃ¥ en standardinstallation av PureFTPd. Vill du ändÃ¥ " "använda det angivna användarnamnet?" #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "Ja, använd detta användarnamn" #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "Användaren finns redan" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" "Användarnamnet du har angivit finns redan i PureFTPd. Du mÃ¥ste välja ett " "annat namn för ditt nya login." #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "Kunde inte lägga till användare" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "Användaren kunde inte läggas till för du saknar rättigheter att göra det. " "Detta kan bero pÃ¥ att nÃ¥got annat program använder filen/filerna i frÃ¥ga." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "Du har osparad information" #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "Du har ändrat informationen för en användare.\n" "Vill du spara den informationen först?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "Ja, _Spara informationen" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "_Avbryt" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "Copyright (C) 2003 Isak Savo" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "" "Tillgängligt enligt termerna i GNU General Public " "Licence." #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" "Systemet behöver förberedas.\n" "\n" "För att kunna använda användarhanteraren sÃ¥ mÃ¥ste vissa ändringar göras pÃ¥ " "ditt system. Listan nedanför innehÃ¥ller de ändringar som PureAdmin kommer " "att genomföra om du trycker \"Ja\". Kontrollera och ändra vid behov innan du " "gÃ¥r vidare." #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "Ett grafiskt verktyg för att övervaka och hantera PureFTPd FTP-serven\n" "PureAdmin hemsida: http://purify.sourceforge.net/\n" "PureFTPd hemsida: http://www.pureftpd.org/" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "Om PureAdmin" #: ../dialogs.glade.h:12 msgid "Apply System Changes" msgstr "Genomför systemändringarna" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Stäng _alla anslutningar" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Avbryt ak_tivitet" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "Bryter samtliga anslutningar och aktiviteter för den valda användaren" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Avbryter den valda upp- eller nedladdningen" #: ../dialogs.glade.h:17 msgid "Open the user editor and shows the selected users' information" msgstr "" "Öppnar användarhanteraren och visar informationen för den valda användaren" #: ../dialogs.glade.h:18 msgid "Select Character Encoding" msgstr "Välj teckenkodning:" #: ../dialogs.glade.h:19 msgid "Yes, Apply Changes" msgstr "Ja, genomför ändringarna" #: ../dialogs.glade.h:20 msgid "_Don't show this message again" msgstr "_Visa inte detta meddelande igen" #: ../dialogs.glade.h:21 msgid "_Filter" msgstr "_Filter" #: ../dialogs.glade.h:22 msgid "_Show User Information" msgstr "_Visa användarinformation" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "Aktivitet:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Ã…tgÃ¥ngen tid:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "Loggfil" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "Anslutna användare" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "Förlopp:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "Kvarvarande tid:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Ansluten dator:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "Upp- och nedladdningar" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "Användarnamn:" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "Aktivitet" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "Stäng _alla anslutningar" #: ../mainwindow.glade.h:13 msgid "Closes the selected transfer" msgstr "Stänger den valda aktiviteten" #: ../mainwindow.glade.h:14 msgid "Disconnects the selected user" msgstr "Kopplar frÃ¥n den valda användaren" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "Filnamn:" #: ../mainwindow.glade.h:16 msgid "Information about PureAdmin" msgstr "Information om PureAdmin" #: ../mainwindow.glade.h:17 msgid "Lauch PureFTPd server" msgstr "Starta PureFTPd servern" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Loggning" #: ../mainwindow.glade.h:20 msgid "Manage Users" msgstr "Hantera användare" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Hantera _användare" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "Hantera pureftpds användare" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "Hantera pÃ¥gÃ¥ende aktiviteter pÃ¥ servern" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "Dokumentationshemsida" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "Supporthemsida" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "" "Öppnar fönstret för debugutskrifter. Användbart vid rapportering av buggar." #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "PureAdmin" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "PureAdmin: Debuggningsfönster" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Visa avancerad information" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "Visar en notifikation när den valda överföringen är färdig" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "Stänger alla nuvarande anslutningar" #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "Besök PureAdmins dokumentation pÃ¥ nätet med hjälp av din webbläsare." #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "Besök PureAdmins supportforum pÃ¥ nätet med hjälp av din webbläsare." #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_Om" #: ../mainwindow.glade.h:35 msgid "_Close transfer" msgstr "Avbryt ak_tivitet" #: ../mainwindow.glade.h:36 msgid "_Connections" msgstr "A_nslutningar" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "_Debugutskrifter" #: ../mainwindow.glade.h:38 msgid "_Disconnect user" msgstr "Koppla ner användaren" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Redigera" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "_Arkiv" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "_Hjälp" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "_Notifiera när den är klar" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_PureFTPd" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Ã…teröppna loggfilen" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "Teckenkodning" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "Standardvärden för grupper och användarer" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Loggning" #: ../prefwin.glade.h:4 msgid "Network" msgstr "Nätverk" #: ../prefwin.glade.h:5 msgid "Settings" msgstr "Inställningar" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "Användarhantering" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "Notifiera alltid när aktiviteter är färdiga" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Bläddra..." #: ../prefwin.glade.h:9 msgid "C_ustom" msgstr "_Egendefinierad" #: ../prefwin.glade.h:10 msgid "Default _password file:" msgstr "Standard _lösenordsfil:" #: ../prefwin.glade.h:11 msgid "Default pure_db file:" msgstr "Standard pure_db fil" #: ../prefwin.glade.h:12 msgid "External" msgstr "Externt" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "Om denna är aktiverad kommer en ikon att synas i notifieringsytan" #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" "Om detta är ikryssat sÃ¥ kommer IP-adresser att göras om till logiska namn " "(till exempel www.nagondoman.se). Dock sÃ¥ tar dessa konverteringar tid och " "PureAdmin kan verka snabbare och svara snabbare om du lÃ¥ter bli att kryssa i " "det här alternativet." #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "" "Om det här alternativet är aktiverat kommer PureAdmin att komma ihÃ¥g storlek " "och position för huvudfönstret." #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "Loggningsmetod:" #: ../prefwin.glade.h:17 msgid "Main" msgstr "Generellt" #: ../prefwin.glade.h:18 msgid "Pure-pw _command:" msgstr "Pure-pw _kommando:" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "PureAdmin: Inställningar" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "Kom ihÃ¥g _storlek och position pÃ¥ fönstret" #: ../prefwin.glade.h:21 msgid "S_yslog" msgstr "S_yslog" #: ../prefwin.glade.h:22 msgid "System _GroupID:" msgstr "System_gruppid:" #: ../prefwin.glade.h:23 msgid "System _UserID:" msgstr "System_användarid:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" "Detta avser den binära lösenordfilen som ska användas. Standardvärdet (\"/" "etc/pureftpd.pdb) borde fungera bra för de flesta" #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" "Detta är den hemkatalog som kommer ges till nya användare som standard." #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "Detta är namnet pÃ¥ pure-pw kommandot. Använd hela sökvägen om programmet är " "installerat pÃ¥ nÃ¥got annorlunda ställe." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" "Detta är lösenordsfilen som ska användas. Standardvärdet (\"/etc/pureftpd." "passwd\") borde fungera bra för de flesta" #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" "Detta är det grupp id för systemet som kommer ges till nya användare som " "standard." #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" "Detta är det användarid för systemet som kommer ges till nya användare som " "standard." #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "" "Detta kommer att söka igenom systemet efter externa filer och kommandon.." #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "Använd systemets teckenkodning" #: ../prefwin.glade.h:32 msgid "Username _encoding:" msgstr "_Teckenkodning för användarnamn:" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "Virtuella användare" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" "Du bör undvika att använda icke-ASCII-tecken i dina användarnamn. Om du ändÃ¥ " "använder dem mÃ¥ste du se till att denna inställning är satt till den " "teckenkodning som dina kunders ftpklienter förstÃ¥r." #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Bläddra..." #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "_Använd notifieringsikon" #: ../prefwin.glade.h:37 msgid "_Home directory:" msgstr "_Hemkatalog:" #: ../prefwin.glade.h:38 msgid "_Logfile:" msgstr "_Loggfil:" #: ../prefwin.glade.h:39 msgid "_Resolve hostnames" msgstr "_Översätt IP-adresser" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "_Sök i systemet" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "_Välj..." #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 stänger av begränsningar)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "(Kommaseparerad lista. Lämna tomt för att tillÃ¥ta allt)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "(Kb/s)" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "(Mb)" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "Felaktigt gruppid" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "Felaktigt användarid" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" "Användarna här är sÃ¥ kallade \"Virtuella användare\" och finns endast i " "PureFTP. Andra användare (sÃ¥som vanliga konton pÃ¥ datorn) kan kanske ocksÃ¥ " "logga in beroende pÃ¥ inställningarna för ftpservern." #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" "Ange användarinformation\n" "\n" "Ange de nödvändiga fälten för att skapa användaren." #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" "Ange lösenord\n" "\n" "Ange det lösenord du vill ge till användaren." #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "TillÃ¥tna IPn för klient:" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "TillÃ¥tna lokala IPn:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "Ändra/sätt lösenord..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "Nekade IPn för klient:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "Nekade lokala IPn:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "" "Katalogen som användaren kommer att hamna i när han/hon loggar in. " "Standardinställningen är att hemkatalogen även är topkatalogen (s.k. " "rotkatalogen)." #: ../usermanager.glade.h:21 msgid "Down:" msgstr "Ner:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "LÃ¥tsasrot:" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "FilförhÃ¥llande" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "Gruppid:" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "Hemkatalog:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" "Om den är ikryssad sÃ¥ kommer användaren inte att kunna bläddra till andra " "kataloger än lÃ¥tsasroten och dess underkataloger." #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "Max bandbredd:" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "Max filer:" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "Max storlek:" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "Max anslutningar:" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "Maximalt antal samtidiga anslutningar frÃ¥n den valda användaren." #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "Maximal hastighet som användaren kan ladda ner med." #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "Maximal hastighet som användaren kan ladda upp med." #: ../usermanager.glade.h:34 msgid "Password:" msgstr "Lösenord:" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "Personlig information" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "PureAdmin: Skapa ny användare" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "PureAdmin: Ange lösenord" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "PureAdmin: Användare" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "" "FilförhÃ¥llandet är förhÃ¥llandet mellan upp- och nedladdningar för användaren." #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "Riktigt namn:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "Begränsningar" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "Spara lösenord" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Användarens hela namn." #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "" "Den maximala totala storleken pÃ¥ filer som användaren kan ha pÃ¥ servern." #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "Det maximala antal filer som användaren kan ha pÃ¥ servern." #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "Namnet som användaren loggar in med" #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "Den tidsbegränsning inom vilken användaren är tillÃ¥ten att logga in (24 " "timmars format). Exempel: 1830-0530" #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "" "Den här katalogen är den högsta katalogen som användaren kan bläddra till " "när han/hon är inloggad." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "Detta är en lista över alla grupper med id mer än 100" #: ../usermanager.glade.h:50 msgid "This is a list of all users with a uid above 100" msgstr "Detta är en lista över alla användare med id mer än 100" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "Tidsbegränsningar:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Upp:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "Använd lÃ¥tsasrot (rekommenderas)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "Användarid:" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "Användarnamn:" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Bekräfta lösenord:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "_Lägg till användare" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "_Ny användare..." #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "_Avbryt ändringarna" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "_Ändra information" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "_Radera användare" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "_Spara ändringarna" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "Administrera och övervaka din ftpserver" #: ../pureadmin.desktop.in.h:2 msgid "FTP Administration" msgstr "FTP-administration" pureadmin-0.4/po/fr.po0000644000175000017500000012054010670517374011663 00000000000000# PureAdmin French translation # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Sébastien LOSS , 2005. # msgid "" msgstr "" "Project-Id-Version: PureAdmin 0.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2006-03-14 21:16+0000\n" "Last-Translator: Bastien Bobe \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 msgid "Directory" msgstr "Dossier" #: ../src/dirbrowser.c:155 msgid "The currently selected directory" msgstr "Dossier actuellement sélectionné" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Dossier Sélectionné" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "" #: ../src/gui_helper.c:208 msgid "PureFTPd running (standalone)" msgstr "PureFTPd focntionne (pid %d)" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_Arrêter Serveur" #: ../src/gui_helper.c:213 msgid "PureFTPd running (inetd)" msgstr "PureFTPd fonctionne (pid %d)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr "PureFTPd hors service" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_Démarrer Serveur" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "Descendant" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Montant" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, fuzzy, c-format msgid "%s of %s (%s%%) %s" msgstr "%s sur %s Kb (%s%%) %s" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, fuzzy, c-format msgid "%s at %s" msgstr "%s Kb %s" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "Inconnu" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 msgid "Invalid Unicode" msgstr "Unicode Invalid" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "Inde_x" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "_Introduction" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "Fenêtre Principa_le" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "Gestionnaire des _Comptes" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "_Préférences" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: Aide" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "Choisissez le chapitre:" #: ../src/helpview.c:301 msgid "Help not found" msgstr "Aide introuvable" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin ne trouve pas les fichiers d'aides. Tentez de réinstaller PureAmin " "pour voir si cela règle le problème" #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "[Moniteur journal désactivé" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "La visualisation du journal est désactivée car ce binaire de PureAdmin n'a " "pas été compilé avec le support de FAM(ou GAMIN).\n" "\n" "Pour y remédier, installez les packages de développement FAM ou GAMIN de " "votre distribution, et recompilez PureAdmin. (Rendez-vous sur http://oss.sgi." "com/projects/fam/) pour plus d'infos." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "La visualisation du journal est désactivée car PureAdmin ne peut pas se " "connecter au service local suivant: FAM/GAMIN-service.\n" "FAM/GAMIN semble être installé; démarrez ce service à la main ou à l'aide de " "inetd(Super Serveur Internet) en ajoutant l'entrée adéquat dans /etc/inetd." "conf.\n" "\n" "Vérifiez la configuration de votre système." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "La visualisation du journal est désactivée car PureAdmin ne peut pas ouvrir " "le fichier journal spécifié.\n" "Assurez-vous d'avoir la permission de lire ce fichier." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "La visualisation du journal est désactivée car PureAdmin ne peut pas " "consulter le fichier journal.\n" "Assurez-vous d'avoir la permission de lire ce fichier." #: ../src/main.c:289 msgid "Fetching information about server activity, please wait..." msgstr "" "Récupération des informations sur l'activité du serveur, veuillez " "patientez..." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "" "Impossible de récolter les informations à propos de l'activité du serveur." #: ../src/mainwin.c:307 msgid "User" msgstr "Compte" #: ../src/mainwin.c:307 msgid "Host" msgstr "Hôte" #: ../src/mainwin.c:307 msgid "Connections" msgstr "Connections" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 #, fuzzy msgid "downloading" msgstr "Descendant" #: ../src/mainwin.c:504 #, fuzzy msgid "uploading" msgstr "Montant" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "Script de démarrage Introuvable" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin ne peut localisé le script utilisé pour démarrer/arrêter le " "serveur.\n" "Ce script devrait se trouvé dans: - /etc/rc.d/init.d/ sur RedHat (et " "similaire)\n" " - /etc/rc.d/ sur Slackware (et similaire)\n" " - /etc/init.d/ sur Debian (et similaire)\n" "La gestion de mise en service du serveur est désactivié." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "Echec de la mise en route du serveur" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin n'a pas pu démarrer le serveur car l'execution de \"%s\" a " "échouée.\n" "L'erreur reportée fut: %s" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "Echec de l'arrêt du serveur" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin n'a pas pu arrêter le serveur car l'execution de \"%s\" a " "échouéeL'erreur reportée fut: %s" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" "Le navigateur pas défaut n'a pas pu etre localisé. Vous pouvez résoudre ceci " "en:↵\n" "••• Changeant la variable d'environnement $BROWSER avec le nom de " "votre navigateur web↵\n" "••• Ouvrant la fenetre \"Applications Préférées\" dans le paneau de control " "de GNOME et en choisissant le navigateur↵\n" "↵\n" "La page demandée est:↵\n" "%s" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "Impossible de lancer le navigateur" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" "Le navigateur web n'a pas pu etre démarré à cause d'une erreur systeme. " "Essayez encore et si le probleme persiste, reportez ce problème dans les " "forums de support.↵\n" "↵\n" "L'erreur fournie est: %s" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "Exécutable pure-pw" #: ../src/prefwin.c:173 msgid "password file" msgstr "Fichier de mot de passe:" #: ../src/prefwin.c:174 msgid "database file" msgstr "Fichier de base de donnée" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 msgid "Not Found" msgstr "Introuvable" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "Veuillez selectionnez %s" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "Choisissez un dossier Home par default" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "" "Commande 'pure-ftpwho' non trouvée. Il est possible que PureFTPd ne soit pas " "installé." #: ../src/srv_comm.c:443 msgid "Permission denied" msgstr "Permission refusée" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "" #: ../src/srv_comm.c:456 #, fuzzy, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "Pure-ftpdwho a quitté de façon anormale: %d. La sortie était: %s" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Racine virtuelle invalide" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "Le chemin spécifié ne fait pas partie du seveur.Valeur par défaut assignée." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Dossier home invalide" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" "L'adresse locale sélectionnée n'est pas un chemin abslolu (il ne commence " "pas par'/'). Information non sauvegardée." #: ../src/usr_manager.c:274 msgid "Username" msgstr "Nom du compte" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "Nom réel" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "Créer le Fichier de Mot de passe?" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" "Le fichier contenant les paramètres des comptes est introuvable. Vous en " "avez besoin pour gérer les comptes virtuels.\n" "Voulez-vous le créer?" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Oui, Créer Fichier" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "Il y a eu une erreur pendant la création du fichier de mot de passe [%s].\n" "L'erreur relevée est: '%s'" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "Création du Fichier Echoué" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "Permission Refusée" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "" "Vous n'avez pas les permissions necessaires pour modifier le fichier de mot " "de passe.Vous devez lancer PureAdmin en tant qu'administrateur pour gérer " "vos comptes." #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Créer Compte et Groupe" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "Il semble que vous n'avez pas de UID et de GID à associer aux comptes " "virtuels!\n" "Voulez-vous les créer et les associer par défaut aux nouveaux comptes?" #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Oui, Créer Compte" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "Echec Création de Compte" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin a été incapable de créer un compte système. Veuillez le créer " "manuellement. Utilisez les outils apropriés de votre distribution et lisez " "le README.VirtualUsersfourni par le package PureFTPd." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "Supprimer Compte '%s'?" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "La suppression du compte sera définitive, lui interdisant tout accés à votre " "serveur.\n" "Etes-vous sûr de vouloir le supprimer?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Oui,_Supprimer Compte" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" "Vous n'avez pas la permission de supprimer le compte %s du fichier des mots " "de passe.Il se peut qu'un autre processus accède au(x) fichier(s)." #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "Erreur lors de la suppression du compte" #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" "Le compte '%s' ne peut être supprimer car la commande pure-pw ne peut être " "trouvée.Assurez-vous qu'elle soit installée et que la configuration pointe " "sur le bon fichier." #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "Le compte '%s' ne peut être supprimer." #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" "Le compte '%s' ne peut être supprimer car il n'existe pas. Si vous en êtes " "sûr, veuillez contacter l'auteur de ce programme, en y joignant la " "description de votre problème" #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "Erreur lors de la sauvegarde de l'utilisateur" #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" "Vous ne disposez pas des permissions nécessaires pour sauvegarder les " "informations concernants le compte. Il se peut qu'un autre processus accède " "au(x) fichier(s) requie(s).Réessayez. Si cela ne fonctionne toujours pas, " "veuillez contacter l'auteur de ce programme, en y joignant la description de " "votre problème" #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "La commande pure-pw n'a pas pu être trouvée. Assurez-vous qu'elle est " "installée et que la configuration pointe sur le bon fichier.\n" #: ../src/usr_manager_cb.c:278 msgid "Long Username" msgstr "Nom Utilisateur complet" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" "Le nom du compte saisie contient plus de 32 caractères. C'est normalement la " "longueur maximum du standard dicté par le server PureFTPd.Voulez-vous " "ignorer cet avertissement?" #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "Oui, _Utiliser ce nom " #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "Compte existant" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" "Le nom saisie existe déjà au sein de PureFTPd.Choisissez un nom différent " "pour votre nouvel utilisateur" #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "Ajout du Compte Refusé" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "L'utilisateur n'a pas pu être ajouté car vous n'avez pas les permissions " "suffisantes pour le faire. Cela peut être à cause d'autres processus qui " "sont en train d'acceder au(x) fichier(s) requis." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "Informations non sauvegardées" #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "Vous éditez actuellement les paramètres d'un compte.\n" "Voulez-vous conserver vos modifications?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "Oui, _Conserver Infos" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "_Annuler" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "Tous droits réservés (c) 2003 Isak Savo" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "" "Réalisé sous les termes de la licences GNU General " "Public." #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "PureAdmin est l'outil graphique de configuration et de gestion du serveur " "PureFtpd.\n" "\n" "Site de PureAdmin: http://purify.sourceforge.net/\n" "Site de PureFTPd: http://www.pureftpd.org/" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "A propos de PureAdmin..." #: ../dialogs.glade.h:12 #, fuzzy msgid "Apply System Changes" msgstr "_Sauver les changements" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Ferme _Toutes les Connections" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Fermer _Transfert" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "Ferme toutes les connections et tranferts du compte sélectionné" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Ferme le transfert sélectionné" #: ../dialogs.glade.h:17 msgid "Open the user editor and shows the selected users' information" msgstr "" "Ouvre l'éditeur d'utilisateurs et affiche les informations de l'utilisateur " "sélectionné." #: ../dialogs.glade.h:18 msgid "Select Character Encoding" msgstr "Choisissez un Encodage de Caratères" #: ../dialogs.glade.h:19 #, fuzzy msgid "Yes, Apply Changes" msgstr "_Annuler les changements" #: ../dialogs.glade.h:20 msgid "_Don't show this message again" msgstr "_Ne plus montrer ce message à l'avenir" #: ../dialogs.glade.h:21 msgid "_Filter" msgstr "_Filtre" #: ../dialogs.glade.h:22 msgid "_Show User Information" msgstr "_Afficher les informations de l'utilisateur" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "Action:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Temps écoulé:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "Journal" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "Comptes Connectés" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "Avancement:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "Temps restant:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Hôte distant:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "Transferts en cours" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "Nom du Compte" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "Activités" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "Fermer _Toutes les Connections" #: ../mainwindow.glade.h:13 #, fuzzy msgid "Closes the selected transfer" msgstr "Ferme le transfert sélectionné" #: ../mainwindow.glade.h:14 #, fuzzy msgid "Disconnects the selected user" msgstr "Ferme toutes les connections et tranferts du compte sélectionné" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "Fichier:" #: ../mainwindow.glade.h:16 msgid "Information about PureAdmin" msgstr "Information à propos de PureAdmin" #: ../mainwindow.glade.h:17 msgid "Lauch PureFTPd server" msgstr "Démarre/Arrête le serveur PureFTPd" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Journal" #: ../mainwindow.glade.h:20 msgid "Manage Users" msgstr "Gérer les Comptes" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Gérer les Comptes" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "Lance le gestionnaire des comptes" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "Documentation en ligne" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "Support en ligne" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "Affiche la console de debugage. Utile pour reporter les bugs." #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "PureAdmin" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "PureAdmin: Console de Debug" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Montre les informations détaillés" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "Termine toutes les connections courantes." #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "Visitez l'aide en ligne de PureAdmins en utilisant votre navigateur." #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "" "Visitez les forums en ligne de PureAdmins en utilisant votre navigateur." #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_À propos" #: ../mainwindow.glade.h:35 #, fuzzy msgid "_Close transfer" msgstr "Fermer _Transfert" #: ../mainwindow.glade.h:36 #, fuzzy msgid "_Connections" msgstr "Connections" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "Console de _Debug" #: ../mainwindow.glade.h:38 #, fuzzy msgid "_Disconnect user" msgstr "_Editer" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Edition" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "_Fichier" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "_Aide" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_PureFTPd" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Relire le journal" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "Encodage des Caratères" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "Paramètres par Defaut des Comptes" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Journalisation" #: ../prefwin.glade.h:4 msgid "Network" msgstr "Réseaux" #: ../prefwin.glade.h:5 msgid "Settings" msgstr "Réglages Divers" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "Gestion des Comptes" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Choisir..." #: ../prefwin.glade.h:9 msgid "C_ustom" msgstr "A_utre" #: ../prefwin.glade.h:10 msgid "Default _password file:" msgstr "Fichier de mot de passe:" #: ../prefwin.glade.h:11 msgid "Default pure_db file:" msgstr "Fichier pure_db:" #: ../prefwin.glade.h:12 msgid "External" msgstr "Commandes externes" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "" "Si activé, une icone de notification apparaitra dans la barre des tâches " "(aussi connu en tant que " #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" "Si cette option est cochée, alors les adresses IP seront converties dans " "leur nom logique.\n" "Exemple : www.unhotequelquonque.com.Cependant, la resolution de nom prend du " "temps, ainsi PureAdmin sera plus rapide et répondant si cette option reste " "décochée." #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "" "Si cette option est coché, alors PureAdmin se souviendra de la taille et de " "la position de la fenêtre principale." #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "Methode:" #: ../prefwin.glade.h:17 msgid "Main" msgstr "Principal" #: ../prefwin.glade.h:18 msgid "Pure-pw _command:" msgstr "Commande pure-pw:" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "PureAdmin: Préférences" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "Se souvenir de la taille et de la position de la fenetre" #: ../prefwin.glade.h:21 msgid "S_yslog" msgstr "_Syslog" #: ../prefwin.glade.h:22 msgid "System _GroupID:" msgstr "ID du _Groupe système:" #: ../prefwin.glade.h:23 msgid "System _UserID:" msgstr "ID du _Compte système:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" "Indiquez l'emplacement du fichier-binaire des mots de passe. Assurez-vous " "que la configuration de PureFTPd et PureAdmin corresponde (ex: \"/etc/" "pureftpd.pdb\")." #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" "Dossier \"home\" attribué par defaut pour chaque nouveau compte PureFtpd." #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "Indiquez la commande pour executer pure-pw. Utilisez le chemin complet si " "elle ne se trouve pas à un emplacement standard." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" "Indiquez l'emplacement du fichier-texte des mots de passe. Assurez-vous que " "la configuration de PureFTPd et PureAdmin corresponde (ex: \"/etc/pureftpd." "passwd\")." #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" "ID du groupe système attribué par defaut pour chaque nouveau compte PureFtpd." #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" "ID du compte système attribué par defaut pour chaque nouveau compte PureFtpd." #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "" "Ceci lancera une recherche dans le système pour les fichiers et commandes " "externes." #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "Utiliser l'encodage système" #: ../prefwin.glade.h:32 msgid "Username _encoding:" msgstr "_Encodage des noms de compte" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "Comptes Virtuels" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" "Vous devriez éviter d'utilisé des caractères non ASCII dans vos nom de " "compte.\n" "Si vous en décider autrement, assurez vous de régler ce paramètre avant " "d'encoder les nouveaux comptes." #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Choisir..." #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "_Activer les alertes dans la barre des taches" #: ../prefwin.glade.h:37 msgid "_Home directory:" msgstr "Dossier _Home:" #: ../prefwin.glade.h:38 msgid "_Logfile:" msgstr "_Fichier journal:" #: ../prefwin.glade.h:39 msgid "_Resolve hostnames" msgstr "_Résoudre les noms de domaine" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "_Systeme de recherche" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "_Choisir..." #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 Désactive les restrictions)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "" "(Liste d'adresse IP séparées par une virgule. Un vide désactive la " "restriction.)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "(Kb/s)" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "(Mb)" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "Nom de groupe Invalide" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "Nom de compte Invalide" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" "Ces comptes sont des \"Compte Virtuels\".\n" "Ils n'existe que pour PureFTPd.En fonction de la configuration de votre " "serveur. Il se peut que les autres comptes (comme les comptes systèmes) " "puissent se connecter." #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" "Ouverture d'un Compte\n" "\n" "Veuillez saisir les détails requis pour créer le compte. " #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" "Mot de Passe\n" "\n" "Saississez le mot de passe du compte." #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "IPs du client Autorisées:" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "IPs locales Autorisées:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "Modifier/Créer Mot de passe..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "IPs du client Refusées:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "IPs locales Refusées:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "" "Dossier dans lequel le compte sera loggé. Par defaut, le dossier \"home\" " "est aussi le dossier racine." #: ../usermanager.glade.h:21 msgid "Down:" msgstr "Descendant:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "Racine virtuelle:" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "Ratio de transfert:" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "ID Groupe:" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "Dossier Home:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" "Cette option rend impossible au compte d'évoluer en dehors de son dossier et " "sous-dossiers." #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "Bande passante maxi:" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "Nb. Maxi de fichiers:" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "Poids Maxi:" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "Nb. maxi de sessions sim.:" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "Nb. maxi de connections simultanées pour ce compte." #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "Vitesse max en émission vers ce compte" #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "Vitesse max en réception depuis ce compte" #: ../usermanager.glade.h:34 msgid "Password:" msgstr "Mot de passe:" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "Détails du compte" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "PureAdmin: Création d'un nouveau compte" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "PureAdmin: Entrez le Mot de passe" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "PureAdmin: Comptes" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "" "Le Ratio est la relation entre les transferts montants et descendants du " "compte." #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "Nom Complet:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "Restrictions" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "Entrez Mot de passe" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Nom complet du compte. " #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "Poids maximum pour chaque fichier transferé par le compte." #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "Nombre maximum de fichiers appartenants au compte sélectionné." #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "Nom de compte utilisé pour se logger." #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "Intervale de temps pendant laquelle le compte est authorisé à se connecter. " "Exemple: 1830-0530 , càd entre 18H30 et 05H30." #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "" "Dossier racine dans lequel le compte pourra évoluer lors de sa connection." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "Liste de tous les groupes système dont l'ID est supérieur à 100" #: ../usermanager.glade.h:50 msgid "This is a list of all users with a uid above 100" msgstr "Liste de tous les comptes système dont l'ID est supérieur à 100" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "Restrictions temporelles:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Montant:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "Utiliser racine virtuelle (recommandé)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "ID Compte:" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "Nom du compte:" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Vérification du Mot de passe:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "_Ajout Compte" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "_Nouveau compte..." #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "_Annuler les changements" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "_Editer" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "_Supprimer" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "_Sauver les changements" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "Administre et suveille votre serveur FTP" #: ../pureadmin.desktop.in.h:2 msgid "FTP Administration" msgstr "Administration du FTP" #~ msgid "[logfile]" #~ msgstr "[journal]" #, fuzzy #~ msgid "lbl_elapsed_time" #~ msgstr "Temps écoulé:" #, fuzzy #~ msgid "lbl_remaining_time" #~ msgstr "Temps restant:" #, fuzzy #~ msgid "lbl_username" #~ msgstr "Nom du compte" #~ msgid "0000-0000" #~ msgstr "0000-0000" #~ msgid "Couldn't find pixmap file: %s" #~ msgstr "Fichier image: %s introuvable" #, fuzzy #~ msgid "PureFTPd running" #~ msgstr "PureFTPd hors service" #, fuzzy #~ msgid "Filename" #~ msgstr "Nom du compte" #, fuzzy #~ msgid "Size" #~ msgstr "Poids Maxi:" #~ msgid "Unable to read FTP-Server data" #~ msgstr "Impossible de lire les données du server FTP" #~ msgid "" #~ "PureAdmin was unable to retrieve ftpserver data. This is most likely due " #~ "to insufficient permissions.\n" #~ "Try restarting PureAdmin with root privileges." #~ msgstr "" #~ "PureAdmin n'a pas été capable de rapatrier les données du server ftp. " #~ "Cela est sûrement due à des permissons insuffisantes.Essayez de relancer " #~ "PureAmin avec les privilèges administrateur." #~ msgid "This will reset the values to those found at startup." #~ msgstr "Réinitialise les valeurs à celles trouvées par défaut" #~ msgid "_Search/Set Defaults" #~ msgstr "_Régler par défaut" #~ msgid "" #~ "PureAdmin was unable to fetch information about your system and therefor " #~ "may not work as expected.\n" #~ "\n" #~ "The problem should be resolved if you reinstall PureAdmin." #~ msgstr "" #~ "PureAdmin est incapable de trouver les données systèmes et son " #~ "fonctionnement est altéré.\n" #~ "\n" #~ "Le problème devrait se résoudre en ré-installant PureAdmin." #~ msgid "Failed to get system info" #~ msgstr "Impossible de récolter les infos système" pureadmin-0.4/po/bg.po0000644000175000017500000013361010670517373011645 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PureAdmin 0.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2005-11-24 16:54+0100\n" "Last-Translator: Burning Dude \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 msgid "Directory" msgstr "ДиректориÑ" #: ../src/dirbrowser.c:155 msgid "The currently selected directory" msgstr "Текуща директориÑ" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Изберете директориÑ" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "" #: ../src/gui_helper.c:208 msgid "PureFTPd running (standalone)" msgstr "PureFTPd включен (ÑамоÑтоÑтелен)" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_Спри Ñървър" #: ../src/gui_helper.c:213 msgid "PureFTPd running (inetd)" msgstr "PureFTPd включен (inetd)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr "PureFTPd изключен" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_Стартирай Ñървър" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "Теглене" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Качване" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, fuzzy, c-format msgid "%s of %s (%s%%) %s" msgstr "%s от %s Kb (%s%%) %s" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, fuzzy, c-format msgid "%s at %s" msgstr "%s Kб %s" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "ÐеизвеÑтно" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 msgid "Invalid Unicode" msgstr "Ðевалиден Unicode" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "Индек_Ñ" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "_Въведение" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "_Главен прозорец" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "_Управление на потребители" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "_ПредпочитаниÑ" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: Помощ" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "Изберете глава" #: ../src/helpview.c:301 msgid "Help not found" msgstr "Помощта не е намерена" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin не можа да намери файловете за помощ.Опитайте да реÑтартирате " "PureAdmin, за да проверите дали това решава проблема." #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "[Показвач на логове Изключен]" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "Показвача на логове е изключен, защото FAM не е инÑталиран на този компютър. " "Ðко желаете да ползвате показването на логове трÑбва да инÑталирате FAM и да " "рекомпилирате PureAdmin\n" "\n" "Проверете в диÑтрибуциÑта Ñи за подходÑщи пакети или поÑетете http://oss.sgi." "com/projects/fam/ за повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно FAM." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "Показвача на логове е изключен, защото PureAdmin не можа да Ñе Ñвърже Ñ " "локалната FAM-уÑлуга.\n" "FAM е инÑталиран, така че би било доÑтатъчно да Ñтартирате FAM като отделен " "Ñървър или да го включите\n" "от inetd (Интернет Супер Сървъра) като го добавите в /etc/inetd.conf.\n" "\n" "Проверете конфигурациÑта на FAM ако иÑкате да използвате показването на " "логове." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "Показвача на логове е изключен, защото PureAdmin не можа да отвори Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ " "лог.\n" "Уверете Ñе, че PureAdmin е Ñтартиран от потребител Ñ Ð¿Ñ€Ð°Ð²Ð° за отварÑнето на " "лога." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "Показвача на логове е изключен, защото PureAdmin не може да Ñледи за промени " "в лога.\n" "Уверете Ñе, че PureAdmin е Ñтартиран от потребител Ñ Ð¿Ñ€Ð°Ð²Ð° за доÑтъп до лога." #: ../src/main.c:289 msgid "Fetching information about server activity, please wait..." msgstr "Получава Ñе Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° дейноÑтта на Ñървъра, Ð¼Ð¾Ð»Ñ Ð¿Ð¾Ñ‡Ð°ÐºÐ°Ð¹Ñ‚Ðµ..." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "ÐеуÑпех при доÑтавÑнето на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° дейноÑтта на Ñървъра." #: ../src/mainwin.c:307 msgid "User" msgstr "Потребител" #: ../src/mainwin.c:307 msgid "Host" msgstr "ХоÑÑ‚" #: ../src/mainwin.c:307 msgid "Connections" msgstr "Връзки" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 #, fuzzy msgid "downloading" msgstr "Теглене" #: ../src/mainwin.c:504 #, fuzzy msgid "uploading" msgstr "Качване" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "Ð¡Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ð¸Ñ Ñкрипт не е открити" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin не можа да открие Ñкрипта използван за Ñтартиране и Ñпиране на " "Ñървъра.\n" "Този файл трÑбва да Ñе намира в /etc/rc.d/init.d/ при RedHat (или подобно) " "или /etc/rc.d/ на Slackware (и подобно)\n" "Стартирането и Ñпирането Ñа деактивирани." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "Провал при Ñтартирането" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin не можа да Ñтартира Ñървъра, защото изпълнението на \"%s\" Ñе " "провали.\n" "Беше докладвана грешка: %s" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "Грешка при Ñпирането" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin не можа да Ñпре Ñървъра, защото изпълнението на \"%s\" Ñе " "провали.\n" "Беше докладвана грешка: %s" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" "ÐŸÐ¾Ð´Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñе браузър не беше намерен. Можете да поправите това като:\n" " • Промените променливата на Ñредата $BROWSER на името на Ð²Ð°ÑˆÐ¸Ñ ÑƒÐµÐ± " "браузър.\n" " • Отворите \"Preferred Applications\" в ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ð½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ» на GNOME и " "изберете браузъра там.\n" "\n" "Желаната Ñтраница е:\n" "%s" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "Браузъра беше Ñтартиран" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" "Браузърът не беше Ñтартиран поради ÑиÑтемна грешка. Опитайте отново и ако " "грешката оÑтане, докладвайте този бъг във форумите за поддръжка.\n" "\n" "Докладваната грешка беше: %s" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "pure-pw изпълним файл" #: ../src/prefwin.c:173 #, fuzzy msgid "password file" msgstr "Подразбиращ Ñе _password файл:" #: ../src/prefwin.c:174 msgid "database file" msgstr "файл за база данни" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 msgid "Not Found" msgstr "Ðе е открит" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ %s" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "Изберете подразбираща Ñе домашна директориÑ" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "" "Командата 'pure-ftpwho' не е открита. Може би PureFTPd не е инÑталиран." #: ../src/srv_comm.c:443 msgid "Permission denied" msgstr "ДоÑтъп отказан" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "" #: ../src/srv_comm.c:456 #, fuzzy, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "Pure-ftpwho ÑÐ¿Ñ€Ñ Ð½ÐµÐ½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾: %d. Съобщение: %s" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Ðевалиден виртуален корен" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "ВиртуалниÑÑ‚ root, който Ñте избрали не е чаÑÑ‚ от домашната директориÑ. " "СтойноÑтта е променена на подразбиращата Ñе домашна директориÑ." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Ðевалидна домашна директориÑ" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" "Домашната ви Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ðµ е абÑолютна пътека (Ñ‚.е. не започва Ñ '/'). " "ИнформациÑта не е запазена." #: ../src/usr_manager.c:274 msgid "Username" msgstr "Потребител" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "ИÑтинÑко име" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "Създаване на файл за пароли?" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" "Файлът Ñъдържащ логин-имената за виртуалните поребители не беше намерен. Той " "ви е необходим за Ñъздаване и редактиране на ftp-юзъри.\n" "ИÑкате ли да го Ñъздадете?" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Да, Създай файл" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "Получи Ñе грешка при Ñъздаването на файла за пароли [%s].\n" "Грешката е докладвана като: '%s'" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "Създаването на файла провалено" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "ДоÑтъп отказан" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "" "ÐÑмате права за четене и пиÑане във файла за пароли. Това вероÑтно означава, " "че трÑбва да Ñтартирате PureAdmin като root преди да можете да управлÑвате " "потребителите Ñи." #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Създаване на Потребител и Група" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "Изглежда нÑмате ÑобÑтвени ftp потребител и група за ползване от FTP " "потребителите.\n" "ИÑкате ли да Ñъздадете ftpgroup и ftpuser и да ги назначите за новите " "потребители?" #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Да, Ñъздай акаунт" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "Създаването на акаунта Ñе провали" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin не можа да Ñъздаде ÑиÑтемните акаунти. Ще трÑбва да ги Ñъздадете " "ръчно. Използвайте подходÑщите инÑтрументи за вашата диÑÑ‚Ñ€Ð¸Ð±ÑƒÑ†Ð¸Ñ Ð¸ прочетете " "README. VirtualUsers Ñе разпроÑтранÑва Ñ PureFTPd пакета." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "Изтрий потребител '%s" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "Това ще изтрие перманенто Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ñ‚ pureftpd, не позволÑвайки му да Ñе " "логва към Ñървъра.\n" "Сигурен ли Ñте, че иÑкате да изтриете потребителÑ?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Да, _Изтрий Потребител" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" "ÐÑмате права да изтриете потребител %s от password-файла. Това може да Ñе " "получи, ако друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ð¾Ð»Ð·Ð²Ð° файла." #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "Грешка при изтриването." #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" "ПотребителÑÑ‚ '%s' не беше изтрит защото командата pure-pw не беше открита. " "Уверете Ñе, че е инÑталирана и че конфигурациÑта Ñочи към Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»." #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "Потребител '%s' не беше изтрит" #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" "Потребител '%s' не беше премахнат, защото не ÑъщеÑтвува. Ðко Ñте Ñигурен, че " "ÑъщеÑтвува, Ð¼Ð¾Ð»Ñ Ñвържете Ñе Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð° на програмата Ñ Ð¾Ð¿Ð¸Ñание на проблема." #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "Грешка при запиÑването." #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" "ÐÑмате права, за да запазвате потребителÑка информациÑ. Това може да Ñе " "получава, защото друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ð¾Ð»Ð·Ð²Ð° Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¸Ñ Ñ„Ð°Ð¹Ð».\n" "Може да опитате отново и ако не работи, Ð¼Ð¾Ð»Ñ Ñвържете Ñе Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð° прилагайки " "опиÑание на проблема." #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "Командата pure-pw не беше открита. Уверете Ñе, че е инÑталирана и че " "конфигурациÑта Ñочи към Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð».\n" #: ../src/usr_manager_cb.c:278 msgid "Long Username" msgstr "Дълго потребителÑко име" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" "Въведеното потребителÑко име е от над 32 Ñимвола. Това обикновено е " "макÑимална дължина за Ñтандартен PureFTPd Ñървър. ИÑкате ли да продължите Ñ " "това име, въпреки вÑичко?" #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "Да, използвай това име " #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "ПотребителÑÑ‚ ÑъщеÑтвува" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" "ПотребителÑкото име вече ÑъщеÑтвува в PureFTPd. ТрÑбва да изберете различно " "име за Ð½Ð¾Ð²Ð¸Ñ Ð»Ð¾Ð³Ð¸Ð½." #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "ДобавÑнето пропадна" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "Юзърът не беше добавен, защото нÑмате права да го направите. Това може да Ñе " "получи, ако друг файл ползва необходимиÑÑ‚ файл." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "Имате незапазена информациÑ." #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "Ð’ момента редактирате информациÑта за потребител.\n" "Желаете ли първо да запазите информациÑта?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "Да, _запази информациÑта" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "_Отмени" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "Copyright (C) 2003 ИÑак Саво" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "" "РазпроÑтранÑва Ñе по уÑловиÑта на GNU General Public " "Licence." #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "Графично приложение за ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸ управление на Pure Ftp Ñървър.\n" "\n" "PureAdmin Ñтраница: http://purify.sourceforge.net/\n" "PureFTPd Ñтраница: http://www.pureftpd.org/" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "ОтноÑно PureAdmin" #: ../dialogs.glade.h:12 #, fuzzy msgid "Apply System Changes" msgstr "_Запази промените" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Затвори _вÑички потребителÑки връзки" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Затвори _транÑфер" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "Ð—Ð°Ñ‚Ð²Ð°Ñ€Ñ Ð²Ñички връзки за Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Ð—Ð°Ñ‚Ð²Ð°Ñ€Ñ Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¾Ñ‚Ð¾ качване или теглене." #: ../dialogs.glade.h:17 msgid "Open the user editor and shows the selected users' information" msgstr "" "ÐžÑ‚Ð²Ð°Ñ€Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»ÑÐºÐ¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€ и показва Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»" #: ../dialogs.glade.h:18 msgid "Select Character Encoding" msgstr "Изберете кодировка" #: ../dialogs.glade.h:19 #, fuzzy msgid "Yes, Apply Changes" msgstr "_Отмени промените" #: ../dialogs.glade.h:20 msgid "_Don't show this message again" msgstr "_Ðе показвай това Ñъобщение отново" #: ../dialogs.glade.h:21 msgid "_Filter" msgstr "_Филтър" #: ../dialogs.glade.h:22 msgid "_Show User Information" msgstr "_Показване на инфо за потребителÑ" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "ДейÑтвие:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Изминало време:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "ТекÑÑ‚ на лога" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "Потребители онлайн" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "ПрогреÑ:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "ОÑтаващо време:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Отдалечен хоÑÑ‚:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "Ð¢ÐµÐ³Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑвалÑниÑ" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "Потребител:" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "ÐктивноÑÑ‚" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "Затвори _вÑички връзки" #: ../mainwindow.glade.h:13 #, fuzzy msgid "Closes the selected transfer" msgstr "Ð—Ð°Ñ‚Ð²Ð°Ñ€Ñ Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¾Ñ‚Ð¾ качване или теглене." #: ../mainwindow.glade.h:14 #, fuzzy msgid "Disconnects the selected user" msgstr "Ð—Ð°Ñ‚Ð²Ð°Ñ€Ñ Ð²Ñички връзки за Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "Файл:" #: ../mainwindow.glade.h:16 msgid "Information about PureAdmin" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° PureAdmin" #: ../mainwindow.glade.h:17 msgid "Lauch PureFTPd server" msgstr "ПуÑни PureFTPd Ñървъра" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Логове" #: ../mainwindow.glade.h:20 msgid "Manage Users" msgstr "Контрол на юзъри" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Управление на _юзъри" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "Управление на pureftpd потребители" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "Онлайн документациÑ" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "Онлайн поддръжка" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "ОтварÑне на конзолата за дебъгване. Полезно за докладване на бъгове." #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "PureAdmin" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "PureAdmin: Дебъг конзола" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Показване на разширена информациÑ" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "Спира вÑички отворени конекции." #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "" "ПоÑетете Ñайта Ñ Ð¾Ð½Ð»Ð°Ð¹Ð½ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð° PureAdmins през уеб браузъра Ви." #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "ПоÑетете форумите за поддръжка на PureAdmin през браузъра Ви." #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_ОтноÑно" #: ../mainwindow.glade.h:35 #, fuzzy msgid "_Close transfer" msgstr "Затвори _транÑфер" #: ../mainwindow.glade.h:36 #, fuzzy msgid "_Connections" msgstr "Връзки" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "_Дебъг конзола" #: ../mainwindow.glade.h:38 #, fuzzy msgid "_Disconnect user" msgstr "_Редактирай потребител" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Редактиране" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "_Файл" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "_Помощ" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_PureFTPd" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Презареди лога" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "Кодировка на Ñимволите" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Логване" #: ../prefwin.glade.h:4 msgid "Network" msgstr "Мрежа" #: ../prefwin.glade.h:5 msgid "Settings" msgstr "ПредпочитаниÑ" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "Управление на потребители" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Ðамери..." #: ../prefwin.glade.h:9 msgid "C_ustom" msgstr "" #: ../prefwin.glade.h:10 msgid "Default _password file:" msgstr "Подразбиращ Ñе _password файл:" #: ../prefwin.glade.h:11 msgid "Default pure_db file:" msgstr "Подразбиращ Ñе pure_db файл:" #: ../prefwin.glade.h:12 msgid "External" msgstr "Външни" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "" "Ðко е включено ще Ñе поÑви икона в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ tray (извеÑтен още като облаÑÑ‚ " "Ñа оÑведомÑване)." #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" "Ðко това е включено тогава IP-адреÑите ще бъдат преобразувани в логичеÑки " "имена (www.somehost.com например). Проверките, обаче, отнемат време и " "PureAdmin ще реагира по-добре и ще работи по-бързо, ако изключите тази опциÑ." #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "" "Ðко това е активирано, PureAdmin ще помни размера и позициÑта на Ð³Ð»Ð°Ð²Ð½Ð¸Ñ " "прозорец." #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "Метод за логване:" #: ../prefwin.glade.h:17 msgid "Main" msgstr "Главни" #: ../prefwin.glade.h:18 msgid "Pure-pw _command:" msgstr "Pure-pw _команда:" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "PureAdmin: ПредпочитаниÑ" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "ЗапомнÑне на _размер и Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð½Ð° прозореца" #: ../prefwin.glade.h:21 msgid "S_yslog" msgstr "S_yslog" #: ../prefwin.glade.h:22 msgid "System _GroupID:" msgstr "СиÑтемна _Група:" #: ../prefwin.glade.h:23 msgid "System _UserID:" msgstr "СиÑтемен _Потребител:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" "Това е бинарниÑÑ‚ файл Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð¸, който ще Ñе използва. ПодразбиращиÑÑ‚ Ñе (\"/" "etc/pureftpd.pdb) трÑбва да Ñвърши работа на повечето потребители" #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" "Това е домашната директориÑ, коÑто ще Ñе дава по подразбиране на новите " "потребители." #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "Това е името на pure-pw командата. Използвайте пълна пътека ако е " "инÑталирана на неÑтандартно мÑÑто." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" "Това е текÑтовиÑÑ‚ файл Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð¸, който ще Ñе използва. ПодразбиращиÑÑ‚ Ñе (\"/" "etc/pureftpd.passwd\") трÑбва да Ñвърши работа на повечето потребители" #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" "Това е подразбиращиÑÑ‚ Ñе ÑиÑтемен потребител, който ще бъде назначаван по " "подразбиране на новите потребители." #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" "Това е подразбиращата Ñе ÑиÑтемна група, коÑто ще бъде назначавана по " "подразбиране на новите потребители." #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "Това ще претърÑи ÑиÑтемата ви за външните файлове и команди.." #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "Използване на ÑиÑтемна кодировка" #: ../prefwin.glade.h:32 msgid "Username _encoding:" msgstr "Кодировка на потребителÑко име" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "Виртуални потребители" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" "Препоръчително е да избÑгвате не-ASCII Ñимволи във вашите потребителÑки " "имена. Ðко ги използвате, уверете Ñе, че наÑтроеното тук кодиране може да Ñе " "разбереот ftp клиентите на потребителите ви." #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Ðамери..." #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "_Вкл. ÑиÑтемно уведомеÑване в tray" #: ../prefwin.glade.h:37 msgid "_Home directory:" msgstr "_Домашна директориÑ:" #: ../prefwin.glade.h:38 msgid "_Logfile:" msgstr "_Лог:" #: ../prefwin.glade.h:39 msgid "_Resolve hostnames" msgstr "_Получаване на хоÑтове" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "_ТърÑи в ÑиÑтема" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "_Избери..." #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 премахва ограничение)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "" "(СпиÑък разделен ÑÑŠÑ Ð·Ð°Ð¿ÐµÑ‚Ð°Ð¸, оÑтавете празно за без ограничение)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "(Kб/s)" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "(Mб)" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "Ðевалидна Група" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "<и>Ðевалиден Потребител" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" "Виртуалните потребители ÑъщеÑтвуват Ñамо в PureFTP. Други потребители " "(като нормални акаунти) може да могат да Ñе логват в завиÑимоÑÑ‚ от " "конфигурациÑта на Ñървъра Ви." #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" "Въведете потребителÑката информациÑ\n" "\n" "ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ необходимите детайли за Ñъздаване на потребителÑ. " #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" "ПоÑтави парола\n" "\n" "Въведете паролата, коÑто иÑкате да поÑтавите за потребителÑ." #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "Позволени клиентÑки IP-та:" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "Позволени локални IP-та:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "Смени/Ñложи парола..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "Забранени клиентÑки IP-та:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "Забранени локални IP-та:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "" "ДиректориÑ, в коÑто Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ñ‰Ðµ бъде логван. По подразбиране, домашната " "Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ðµ Ñъщо оÑновната (root) директориÑ." #: ../usermanager.glade.h:21 msgid "Down:" msgstr "Ðадолу:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "Виртуален корен" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "Файлов рейтинг" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "Група" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "Домашна директориÑ:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "МакÑ. трафик:" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "МакÑ. файлове:" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "МакÑ. размер:" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "МакÑимален брой ÑеÑии:" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "МакÑимален брой едновременни конекции за Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»." #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "МакÑимална ÑкороÑÑ‚ на теглене за потребител" #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "МакÑимална ÑкороÑÑ‚ на качване за потребител" #: ../usermanager.glade.h:34 msgid "Password:" msgstr "Парола:" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "Лична информациÑ:" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "PureAdmin: Създай потребител" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "PureAdmin: Въведи Парола" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "PureAdmin: Потребители" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "Рейтингът е отношението между качване и теглене за потребителÑ." #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "ИÑтинÑко име:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "ОграничениÑ" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "ПоÑтави Парола" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Пълно име на потребител. " #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "МакÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² размер, притежаван от Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ вÑÑко време." #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "МакÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð±Ñ€Ð¾Ð¹ файлове, които потребителÑÑ‚ може да притежава." #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "Името, което потребителÑÑ‚ ползва за да Ñе логне." #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "Периодът от време, в който потребител може да Ñе логне (24 чаÑов формат). " "пример: 1830-0530" #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "" "Това е най-горната директориÑ, в коÑто може да влиза потребител, който е " "логнат." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "СпиÑък на вÑички групи Ñ GID над 100" #: ../usermanager.glade.h:50 #, fuzzy msgid "This is a list of all users with a uid above 100" msgstr "СпиÑък на вÑички групи Ñ GID над 100" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "Времеви ограничениÑ:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Ðагоре:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "Използвай виртуален корен (Препоръчително)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "ПотребителÑко ID:" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "ПотребителÑко име" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Потвърди парола:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "_Добави Потребител" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "Добави нов потребител..." #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "_Отмени промените" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "_Редактирай потребител" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "_Изтрий потребител" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "_Запази промените" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "ÐдминиÑтрирайте и наблюдавайте ÑÐ²Ð¾Ñ FTP Ñървър" #: ../pureadmin.desktop.in.h:2 msgid "FTP Administration" msgstr "FTP ÐдминиÑтрациÑ" #~ msgid "[logfile]" #~ msgstr "[logfile]" #, fuzzy #~ msgid "lbl_elapsed_time" #~ msgstr "Изминало време:" #, fuzzy #~ msgid "lbl_remaining_time" #~ msgstr "ОÑтаващо време:" #, fuzzy #~ msgid "lbl_username" #~ msgstr "Потребител" pureadmin-0.4/po/it.po0000644000175000017500000011643610670517374011701 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Massimo MAGLIOCCA , 2004. # msgid "" msgstr "" "Project-Id-Version:PureAdmin 0.1.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-08 15:09+0200\n" "PO-Revision-Date: 2004-06-24 13:04+0100\n" "Last-Translator: Massimo Magliocca \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dirbrowser.c:154 #, fuzzy msgid "Directory" msgstr "Directory Utente:" #: ../src/dirbrowser.c:155 #, fuzzy msgid "The currently selected directory" msgstr "Seleziona la directory" #: ../src/dirbrowser.c:216 msgid "Select directory" msgstr "Seleziona la directory" #: ../src/gui_helper.c:61 msgid "GiB" msgstr "" #: ../src/gui_helper.c:63 msgid "MiB" msgstr "" #: ../src/gui_helper.c:65 msgid "KiB" msgstr "" #: ../src/gui_helper.c:71 msgid "GiB/s" msgstr "" #: ../src/gui_helper.c:73 msgid "MiB/s" msgstr "" #: ../src/gui_helper.c:75 msgid "KiB/s" msgstr "" #. Zero bytes per second in transfer speed #: ../src/gui_helper.c:78 msgid "0 b/s (stalled)" msgstr "" #: ../src/gui_helper.c:208 #, fuzzy msgid "PureFTPd running (standalone)" msgstr " PureFTPd e' in esecuzione (pid %d)" #: ../src/gui_helper.c:209 ../src/gui_helper.c:214 msgid "_Stop Server" msgstr "_Ferma Server" #: ../src/gui_helper.c:213 #, fuzzy msgid "PureFTPd running (inetd)" msgstr " PureFTPd e' in esecuzione (pid %d)" #: ../src/gui_helper.c:218 msgid "PureFTPd not running" msgstr " PureFTPd non e' in esecuzione" #: ../src/gui_helper.c:219 ../mainwindow.glade.h:45 msgid "_Start Server" msgstr "_Avvia Server" #: ../src/gui_helper.c:366 msgid "Downloading" msgstr "Scaricamento" #: ../src/gui_helper.c:366 msgid "Uploading" msgstr "Uploading" #. Translators: This will be come 'xx MiB of yy MiB (pp%) nn KiB/s #. * where 'xx' is current size, yy is total size, pp is percentage and nn is the current speed #: ../src/gui_helper.c:381 #, fuzzy, c-format msgid "%s of %s (%s%%) %s" msgstr "%s di %s bytes (%s%%) %s" #. Translators: This will become 'xx MiB at yy KiB/s' where xx is current #. * uploaded size and yy is the upload speed #: ../src/gui_helper.c:393 #, c-format msgid "%s at %s" msgstr "" #. Translators: This refers to the time remaining of an up/download #: ../src/gui_helper.c:411 msgid "Unknown" msgstr "" #. Failed character encoding conversion, return partial string #: ../src/helper.c:138 ../src/helper.c:167 #, fuzzy msgid "Invalid Unicode" msgstr "Utente non valido" #. filename (w/o .txt extension) : Human readable name (w/ mnemonic) #: ../src/helpview.c:45 msgid "Inde_x" msgstr "Inde_x" #. Separator #: ../src/helpview.c:47 msgid "_Introduction" msgstr "_Introduzione" #: ../src/helpview.c:48 msgid "_Main Window" msgstr "_Finestra principale" #: ../src/helpview.c:49 msgid "_User Manager" msgstr "_Gestione Utenti" #: ../src/helpview.c:50 msgid "_Preferences" msgstr "_Preferenze" #: ../src/helpview.c:200 msgid "PureAdmin: Help" msgstr "PureAdmin: Aiuto" #: ../src/helpview.c:217 msgid "Select chapter:" msgstr "Seleziona il paragrafo:" #: ../src/helpview.c:301 msgid "Help not found" msgstr "Aiuto non trovato" #: ../src/helpview.c:302 msgid "" "PureAdmin could not find the helpfiles.Try reinstalling PureAdmin to see if " "that solves the problem." msgstr "" "PureAdmin non e' in grado di trovare i files di aiuto.Prova a reinstallare " "PureAdmin per vedere sequesto risolve il problema." #: ../src/logfile.c:186 msgid "[Logfile viewer Disabled]" msgstr "[Visualizzatore dei Log Disabilitato]" #: ../src/logfile.c:191 msgid "" "Logfile viewer has been disabled because FAM isn't installed on this " "computer. If you want to use the logfile viewer you need to install FAM and " "then recompile PureAdmin\n" "\n" "Check your distribution for appropriate packages or visit http://oss.sgi.com/" "projects/fam/ for more info about FAM." msgstr "" "Il visualizzatore dei Log e' stato disabilitato perche' non e' stato " "installato FAM su questoserver. Se vuoi usare il visualizzatore dei Log devi " "installare FAM e poi ricompilare PureAdmin\n" "\n" "Controlla la tua distribuzione per gli appropriati pacchetti o visita http://" "oss.sgi.com/projects/fam per maggiori informazioni circa FAM." #: ../src/logfile.c:197 msgid "" "Logfile viewer has been disabled because PureAdmin couldn't connect to local " "FAM-service.\n" "FAM is installed so it should be sufficient to either start FAM as a " "separate server or run it\n" "from inetd (Internet Super Server) by adding an entry to /etc/inetd.conf.\n" "\n" "Check your configuration for FAM if you want to use the logfile viewer." msgstr "" "Il visualizzatore dei Log e' stato disabilitato perche' PureAdmin non e' in " "grado di connettersi al servizio locale FAM.\n" "FAM e' stato installato per cui dovrebbe essere sufficiente farlo partire " "come un server standalone o farlo funzionare tramite\n" "inetd (Internet Super Server) aggiungendo un'entry in /etc/inetd.conf.\n" "\n" "Controlla la tua configurazione di FAM se vuoi usare il visualizzatore dei " "Log." #: ../src/logfile.c:203 msgid "" "Logfile viewer has been disable because PureAdmin could not open the " "specified logfile.\n" "Make sure that you are running as a user that has permission to open the " "logfile." msgstr "" "Il visualizzatore dei Log e' stato disabilitato perche' PureAdmin non e' in " "grado di aprire il file di log specificato.\n" "Verifica che stai utilizzando un utente con adeguati permessi di lettura del " "file di log." #: ../src/logfile.c:208 msgid "" "Logfile viewer has been disable because PureAdmin could not watch for " "changes to the logfile.\n" "Make sure that you are running as a user that has permission to access the " "logfile." msgstr "" "Il visualizzatore dei Log e' stato disabilitato perche' PureAdmin non e' in " "grado di controllare gli eventuali cambiamenti al file di log.\n" "Verifica che stai utilizzando un utente con adeguati permessi di accesso al " "file di log." #: ../src/main.c:289 #, fuzzy msgid "Fetching information about server activity, please wait..." msgstr "" "Il sistema non e' in grado di recuperare le informazioni riguardanti le " "attivita' del server." #: ../src/main.c:312 msgid "Unable to retreive information about server activities." msgstr "" "Il sistema non e' in grado di recuperare le informazioni riguardanti le " "attivita' del server." #: ../src/mainwin.c:307 #, fuzzy msgid "User" msgstr "ID Utente:" #: ../src/mainwin.c:307 msgid "Host" msgstr "" #: ../src/mainwin.c:307 #, fuzzy msgid "Connections" msgstr "Chiudi_Tutte le Connessioni" #: ../src/mainwin.c:503 #, c-format msgid "User '%s' has finished %s the file '%s'" msgstr "" #: ../src/mainwin.c:504 #, fuzzy msgid "downloading" msgstr "Scaricamento" #: ../src/mainwin.c:504 #, fuzzy msgid "uploading" msgstr "Uploading" #: ../src/mainwin.c:506 msgid "FTP Activity Completed" msgstr "" #: ../src/mainwin_cb.c:264 msgid "Startupscript Not Found" msgstr "Startup Script Non Trovato" #: ../src/mainwin_cb.c:265 msgid "" "PureAdmin could not locate the script used to start and stop the server.\n" "This file should be located in /etc/rc.d/init.d/ on RedHat (and similar) " "and /etc/rc.d/ on Slackware (and similar)\n" "Starting and stopping is disabled." msgstr "" "PureAdmin non e' in grado di trovare lo script usato per far partire e " "fermare il server.\n" "Questo file dovrebbe essere presente in /etc/rc.d/init.d \n" "Start e stop del server sono disabilitati." #: ../src/mainwin_cb.c:282 msgid "Failure to start server" msgstr "Partenza del server fallita" #: ../src/mainwin_cb.c:283 #, c-format msgid "" "PureAdmin was unable to start the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" "PureAdmin non e' in grado di far partire il server perche' l'esecuzione di " "\"%s\" e' fallita.\n" "L'errore riportato e': %s" #: ../src/mainwin_cb.c:288 msgid "Failure to stop server" msgstr "Interruzione del server fallita" #: ../src/mainwin_cb.c:289 #, c-format msgid "" "PureAdmin was unable to stop the server because the execution of \"%s\" " "failed.\n" "Error reported was: %s" msgstr "" " PureAdmin non e' in grado di fermare il server perche' l'esecuzione di \"%s" "\" e' fallita.\n" "L'errore riportato e': %s" #: ../src/mainwin_cb.c:346 ../src/mainwin_cb.c:349 msgid "Disconnect user" msgstr "" #: ../src/mainwin_cb.c:426 #, c-format msgid "" "The default browser could not be located. You can solve this by either:\n" " • Setting the environment variable $BROWSER to the name of your web " "browser.\n" " • Open \"Preferred Applications\" in the GNOME control panel and set the " "browser there.\n" "\n" "The requested page is:\n" "%s" msgstr "" #: ../src/mainwin_cb.c:433 ../src/mainwin_cb.c:450 msgid "Couldn't launch browser" msgstr "" #: ../src/mainwin_cb.c:447 #, c-format msgid "" "The web browser could not be started because of a system error. Try again " "and if the error remains, report this bug in the support forums.\n" "\n" "The reported error was: %s" msgstr "" #. Used to hint the file selector on the type of file we're selecting #: ../src/prefwin.c:172 msgid "pure-pw executable" msgstr "" #: ../src/prefwin.c:173 #, fuzzy msgid "password file" msgstr "File di password di default:" #: ../src/prefwin.c:174 msgid "database file" msgstr "" #: ../src/prefwin.c:400 ../src/prefwin.c:404 ../src/prefwin.c:408 #, fuzzy msgid "Not Found" msgstr "Aiuto non trovato" #. Translators: %s will expand to the type of file. For instance, 'password file' or 'database file'. #. * This is used as title for the file selector. #: ../src/prefwin.c:462 #, c-format msgid "Please select %s" msgstr "" #: ../src/prefwin.c:481 msgid "Select Default Home Directory" msgstr "Seleziona la Directory Utente di default" #: ../src/srv_comm.c:414 ../src/srv_comm.c:430 msgid "Command 'pure-ftpwho' not found. Perhaps PureFTPd isn't installed" msgstr "" #: ../src/srv_comm.c:443 #, fuzzy msgid "Permission denied" msgstr "Permesso Negato" #: ../src/srv_comm.c:450 msgid "Resource temporarily unavailable." msgstr "" #: ../src/srv_comm.c:456 #, c-format msgid "Pure-ftpwho exited abnormally: %d. Output was: '%s' and '%s' " msgstr "" #. The fake root that the user specified wasn't part of the home directory and thus invalid! #: ../src/usr_manager.c:171 msgid "Invalid fake root" msgstr "Directory Radice non valida" #: ../src/usr_manager.c:172 msgid "" "The fake root you've selected is not a part of the homedirectory. The value " "has been defaulted to the users homedirectory." msgstr "" "La Directory Radice che hai selezionato non fa parte della Directory Utente. " "Il suo valoree' stato impostato a quello della Directory Utente." #: ../src/usr_manager.c:203 msgid "Invalid home directory" msgstr "Directory Utente non valida" #: ../src/usr_manager.c:204 msgid "" "The home directory you have specified is not an absolute path (i.e. not " "starting with a '/'). Information could not be saved" msgstr "" "La Directory Utente che hai specificato non risulta un percorso assoluto " "(cioe' non inizia con '/'). Le informazioni inserite non possono essere " "salvate" #: ../src/usr_manager.c:274 msgid "Username" msgstr "Utente" #: ../src/usr_manager.c:274 msgid "Real Name" msgstr "Nome Reale" #. No password-files found #: ../src/usr_manager.c:662 msgid "Create Password File?" msgstr "Creare File di Password?" #: ../src/usr_manager.c:663 msgid "" "The file containing the login-names for virtual users could not be found. " "You need this file in order to create and edit ftp-users.\n" "Do you want to create this file?" msgstr "" "Non e' stato trovato il file contenente i nomi per il login degli utenti " "virtuali. Hai bisogno di questo file per creare e modificare gli utenti " "FTP.\n" "Vuoi creare questo file?" #: ../src/usr_manager.c:665 msgid "_Yes, Create File" msgstr "_Si, Crea il File" #. Couldn't create password file. Report error to user #: ../src/usr_manager.c:671 #, c-format msgid "" "There was an error when trying to create password file [%s].\n" "The error reported was: '%s'" msgstr "" "C'e' stato un errore nel creare il file di password [%s].\n" "L'errore riportato e': '%s'" #: ../src/usr_manager.c:673 msgid "File Creation Failed" msgstr "Creazione File Fallita" #. We didn't have permission to read/write to the password file #: ../src/usr_manager.c:686 msgid "Permission Denied" msgstr "Permesso Negato" #: ../src/usr_manager.c:687 msgid "" "You don't have permission to read and write to the password file.This " "probably means that you have to run PureAdmin as root before beeing able to " "manage your users." msgstr "" "Non hai i permessi per la lettura e scrittura del file delle password. " "Questo probabilmente significa che devi eseguire PureAdmin con i privilegi " "di root prima di amministrare i tuoi utenti." #: ../src/usr_manager.c:701 msgid "Create User and Group" msgstr "Crea Utenti e Gruppi" #: ../src/usr_manager.c:702 msgid "" "It seems that you do not have a dedicated ftp-user and -group to use with " "the FTP users.\n" "Do you want to create ftpgroup and ftpuser and assign them as default for " "new users?" msgstr "" "Sembra che non hai specificato un utente e gruppo ftp dedicato per il loro " "uso con gli utenti FTP.\n" "Vuoi creare il gruppo ftpgroup e l'utente ftpuser ed assegnare a loro i " "nuovi utenti?" #: ../src/usr_manager.c:704 msgid "_Yes, Create Account" msgstr "_Si, Crea Account" #: ../src/usr_manager.c:710 msgid "Account Creation Failed" msgstr "Creazione Account Fallita" #: ../src/usr_manager.c:711 msgid "" "PureAdmin was unable to create the system-accounts. You will have to create " "them manually. Use the appropriate tools for your distribution and read " "README.VirtualUsers distributed with the PureFTPd package." msgstr "" "PureAdmin non e' in grado di creare gli account di sistema. Dovrai " "crearlimanualmente. Usa i tool appropriati della tua distribuzione e leggi " "il fileREADME.VirtualUsers dustribuito con il pacchetto PureFTPd." #: ../src/usr_manager_cb.c:129 #, c-format msgid "Remove User '%s'?" msgstr "Vuoi rimuovere l'utente '%s'?" #: ../src/usr_manager_cb.c:131 msgid "" "This will permanently remove the user from pureftpd, preventing him or her " "to login to your server.\n" "Are you sure you want to remove this user?" msgstr "" "Questo rimuovera' permanentemente l'utente dal server FTP prevenendone i " "futuri accessi sul server.\n" "Sei sicuro di voler rimuovere questo utente?" #: ../src/usr_manager_cb.c:132 msgid "Yes, _Remove User" msgstr "Si, _Rimuovi l'Utente" #: ../src/usr_manager_cb.c:158 #, c-format msgid "" "You do not have permission to remove the user %s from the password-file. " "This could be because another process is accessing the file(s)." msgstr "" "Non hai i permessi per rimuovere l'utente %s dal file contenente le " "password. Questo potrebbe essere dovuto ad un altro processo che cerca di " "accedere al suddetto file." #: ../src/usr_manager_cb.c:159 ../src/usr_manager_cb.c:164 #: ../src/usr_manager_cb.c:169 ../src/usr_manager_cb.c:174 msgid "Error removing user." msgstr "Errore nel rimuovere l'utente." #: ../src/usr_manager_cb.c:163 #, c-format msgid "" "The user '%s' could not be removed because the pure-pw command could not be " "found. Make sure that it is installed and that the configuration points to " "the correct file." msgstr "" "L'utente '%s' non puo' essere rimosso perche' il comando 'pure-pw' non " "risulta presente. Controllare che sia correttamente installato e che la " "configurazione punti al file corretto." #: ../src/usr_manager_cb.c:168 #, c-format msgid "The user '%s' could not be removed." msgstr "L'utente '%s' non puo' essere rimosso." #: ../src/usr_manager_cb.c:173 #, c-format msgid "" "The user '%s' could not be removed because it doesn't exist. If you are sure " "it exist, please contact the author of this program with a description of " "your problem." msgstr "" "L'utente '%s' non puo' essere rimosso perche' non esiste. Se sei sicuro " "della sua esistenza, per favore contatta l'autore con una descrizione del " "tuo problema." #: ../src/usr_manager_cb.c:232 ../src/usr_manager_cb.c:237 msgid "Error saving user." msgstr "Errore durante la fase di salvataggio dell'utente" #: ../src/usr_manager_cb.c:233 msgid "" "You do not have permission to save the user-information. This could be " "because another process is accessing the required file(s).\n" "You may try again and if that doesn't work, please contact the author with a " "description of your problem." msgstr "" "Non hai i permessi per salvare le informazioni utente. Questo potrebbe " "essere dovuto ad un altro processo che cerca di accedere al file(s) " "richiesto.\n" "Riprova piu' tardi e se continua a non funzionare, per favore contatta " "l'autore con una descrizione del tuo problema." #: ../src/usr_manager_cb.c:238 ../src/usr_manager_cb.c:324 msgid "" "The pure-pw command could not be found. Make sure that the command is " "installed and that the configuration points to the correct file.\n" msgstr "" "il comando 'pure-pw' non risulta presente. Controllare che sia correttamente " "installato e che la configurazione punti al file corretto.\n" #: ../src/usr_manager_cb.c:278 #, fuzzy msgid "Long Username" msgstr "Utente" #: ../src/usr_manager_cb.c:279 msgid "" "The username you have entered contains more than 32 characters. This is " "normally the max length on a standard PureFTPd server. Do you wish to " "continue with this username anyway?" msgstr "" #: ../src/usr_manager_cb.c:282 msgid "Yes, Use this username " msgstr "" #: ../src/usr_manager_cb.c:288 msgid "User already exists" msgstr "" #: ../src/usr_manager_cb.c:289 msgid "" "The username you have entered already exists in PureFTPd. You must select a " "different name for your new login." msgstr "" #: ../src/usr_manager_cb.c:319 ../src/usr_manager_cb.c:323 msgid "Add User Failed" msgstr "Aggiunta Utente fallita" #: ../src/usr_manager_cb.c:320 msgid "" "Could not add the user because you have insufficient permissions to do so. " "This could be bacause some other process is accessing the required file(s)." msgstr "" "Non risulta possibile aggiungere l'utente perche' non hai i permessi " "sufficienti per farlo. Questo potrebbe essere dovuto ad un altro processo " "che cerca di accedere al file(s) contenente le utenze." #: ../src/usr_manager_cb.c:406 msgid "You have unsaved info." msgstr "Hai delle informazioni non salvate." #: ../src/usr_manager_cb.c:407 msgid "" "You are currently editing the information of an user.\n" "Do you wish to save this information first?" msgstr "" "Stai modificando le informazioni di un utente.\n" "Vuoi salvare prima queste informazioni?" #: ../src/usr_manager_cb.c:409 msgid "Yes, _Save Info" msgstr "Si, _Salva le informazioni" #: ../src/usr_manager_cb.c:409 msgid "_Cancel" msgstr "_Cancella" #: ../dialogs.glade.h:1 msgid "Copyright (C) 2003 Isak Savo" msgstr "Copyright (C) 2003 Isak Savo" #: ../dialogs.glade.h:2 msgid "" "Released under the terms of the GNU General Public " "Licence." msgstr "Rilasciato nei termini della licenza GPL" #: ../dialogs.glade.h:3 msgid "" "System needs preparation.\n" "\n" "In order for the user manager to work, some changes needs to be done to your " "system. The list below contains the actions PureAdmin will take if you click " "on yes. Please review and optionally change them before you proceed." msgstr "" #: ../dialogs.glade.h:6 msgid "PureAdmin " msgstr "PureAdmin " #: ../dialogs.glade.h:7 msgid "" "A graphical configuration and management utility for the Pure Ftp server.\n" "\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" msgstr "" "Utilty di configurazione e gestione grafica del server FTP server.\n" "PureAdmin webpage: http://purify.sourceforge.net/\n" "PureFTPd webpage: http://www.pureftpd.org/" #: ../dialogs.glade.h:11 msgid "Abour PureAdmin" msgstr "Informazioni su PureAdmin" #: ../dialogs.glade.h:12 #, fuzzy msgid "Apply System Changes" msgstr "_Salva i Cambiamenti" #: ../dialogs.glade.h:13 msgid "Close _All User Connections" msgstr "Interrompi tutte le connessioni utente" #: ../dialogs.glade.h:14 msgid "Close _Transfer" msgstr "Interrompi Trasferimento" #: ../dialogs.glade.h:15 msgid "Closes all connections and transfers for the selected user" msgstr "" "Interrompi tutte le connessioni e i trasferimenti per l'utente selezionato" #: ../dialogs.glade.h:16 msgid "Closes the selected up- or download." msgstr "Interrompi l'operazione selezionata di upload o download." #: ../dialogs.glade.h:17 #, fuzzy msgid "Open the user editor and shows the selected users' information" msgstr "" "Apri l'editor degli utenti e modifica le informazioni relative all'utente " "selezionato" #: ../dialogs.glade.h:18 #, fuzzy msgid "Select Character Encoding" msgstr "Seleziona il paragrafo:" #: ../dialogs.glade.h:19 #, fuzzy msgid "Yes, Apply Changes" msgstr "_Cancella i Cambiamenti" #: ../dialogs.glade.h:20 #, fuzzy msgid "_Don't show this message again" msgstr "_Non mostrare questa finestra di nuovo" #: ../dialogs.glade.h:21 #, fuzzy msgid "_Filter" msgstr "_File" #: ../dialogs.glade.h:22 #, fuzzy msgid "_Show User Information" msgstr "_Modifica le informazioni Utente" #: ../mainwindow.glade.h:1 msgid "Action:" msgstr "Azione:" #: ../mainwindow.glade.h:2 msgid "Elapsed time:" msgstr "Tempo trascorso:" #: ../mainwindow.glade.h:3 msgid "Logfile output" msgstr "Output del file di Log" #: ../mainwindow.glade.h:4 msgid "Online Users" msgstr "Utenti Online" #: ../mainwindow.glade.h:5 msgid "Progress:" msgstr "Progresso:" #: ../mainwindow.glade.h:6 msgid "Remaining time:" msgstr "Tempo rimanente:" #: ../mainwindow.glade.h:7 msgid "Remote host:" msgstr "Host Remoto:" #: ../mainwindow.glade.h:8 msgid "Uploads and Downloads" msgstr "Uploads e Downloads" #: ../mainwindow.glade.h:9 msgid "Username:" msgstr "Utente:" #. Translators: this is the header for the "Activity" tab #: ../mainwindow.glade.h:11 msgid "Activity" msgstr "Attivita'" #: ../mainwindow.glade.h:12 msgid "Close _All Connections" msgstr "Chiudi_Tutte le Connessioni" #: ../mainwindow.glade.h:13 #, fuzzy msgid "Closes the selected transfer" msgstr "Interrompi l'operazione selezionata di upload o download." #: ../mainwindow.glade.h:14 #, fuzzy msgid "Disconnects the selected user" msgstr "" "Interrompi tutte le connessioni e i trasferimenti per l'utente selezionato" #: ../mainwindow.glade.h:15 msgid "File:" msgstr "File:" #: ../mainwindow.glade.h:16 #, fuzzy msgid "Information about PureAdmin" msgstr "Informazioni su PureAdmin" #: ../mainwindow.glade.h:17 #, fuzzy msgid "Lauch PureFTPd server" msgstr "Lancia FTPd servern" #. Translators: this is the header for the "Logging" tab #: ../mainwindow.glade.h:19 msgid "Logging" msgstr "Logging" #: ../mainwindow.glade.h:20 #, fuzzy msgid "Manage Users" msgstr "Gestione _Utenti" #: ../mainwindow.glade.h:21 msgid "Manage _Users" msgstr "Gestione _Utenti" #: ../mainwindow.glade.h:22 msgid "Manage pureftpd users" msgstr "Gestione ftpd utenti" #: ../mainwindow.glade.h:23 msgid "Manage the current activities on the server" msgstr "" #: ../mainwindow.glade.h:24 msgid "Online Documentation" msgstr "" #: ../mainwindow.glade.h:25 msgid "Online Support" msgstr "" #: ../mainwindow.glade.h:26 msgid "Open up the debugging console. Useful when reporting bugs." msgstr "" "Apri la Console per il debugging. Puo' risultare utile nel riportare i bugs" #: ../mainwindow.glade.h:27 msgid "PureAdmin" msgstr "PureAdmin" #: ../mainwindow.glade.h:28 msgid "PureAdmin: Debugging console" msgstr "PureAdmin: Console per il debugging" #: ../mainwindow.glade.h:29 msgid "Show advanced info" msgstr "Mostra le informazioni avanzate" #: ../mainwindow.glade.h:30 msgid "Shows a notification when the selected transfer is completed" msgstr "" #: ../mainwindow.glade.h:31 msgid "Terminates all currently open connections." msgstr "Termina tutte le connessioni in corso" #: ../mainwindow.glade.h:32 msgid "Visit PureAdmins online documentation using your web browser." msgstr "" #: ../mainwindow.glade.h:33 msgid "Visit the PureAdmin support forums using your web browser." msgstr "" #: ../mainwindow.glade.h:34 msgid "_About" msgstr "_Informazioni" #: ../mainwindow.glade.h:35 #, fuzzy msgid "_Close transfer" msgstr "Interrompi Trasferimento" #: ../mainwindow.glade.h:36 #, fuzzy msgid "_Connections" msgstr "Chiudi_Tutte le Connessioni" #: ../mainwindow.glade.h:37 msgid "_Debug Console" msgstr "_Console per il debugging" #: ../mainwindow.glade.h:38 #, fuzzy msgid "_Disconnect user" msgstr "_Modifica utente" #: ../mainwindow.glade.h:39 msgid "_Edit" msgstr "_Modifica" #: ../mainwindow.glade.h:40 msgid "_File" msgstr "_File" #: ../mainwindow.glade.h:41 msgid "_Help" msgstr "_Aiuto" #: ../mainwindow.glade.h:42 msgid "_Notify when done" msgstr "" #: ../mainwindow.glade.h:43 msgid "_PureFTPd" msgstr "_ PureFTPd" #: ../mainwindow.glade.h:44 msgid "_Re-read logfile" msgstr "_Rileggi file di Log" #: ../prefwin.glade.h:1 msgid "Character Encoding" msgstr "" #: ../prefwin.glade.h:2 msgid "Group and User Defaults" msgstr "Gruppo e Utente di default" #: ../prefwin.glade.h:3 msgid "Logging" msgstr "Logging" #: ../prefwin.glade.h:4 msgid "Network" msgstr "Rete" #: ../prefwin.glade.h:5 #, fuzzy msgid "Settings" msgstr "Azione:" #: ../prefwin.glade.h:6 msgid "User Management" msgstr "Gestione Utenti" #: ../prefwin.glade.h:7 msgid "Always notify finished activities" msgstr "" #: ../prefwin.glade.h:8 ../usermanager.glade.h:16 msgid "Browse..." msgstr "Sfoglia..." #: ../prefwin.glade.h:9 #, fuzzy msgid "C_ustom" msgstr "Personalizzato" #: ../prefwin.glade.h:10 #, fuzzy msgid "Default _password file:" msgstr "File di password di default:" #: ../prefwin.glade.h:11 #, fuzzy msgid "Default pure_db file:" msgstr "Standard puredb file" #: ../prefwin.glade.h:12 msgid "External" msgstr "Avanzato" #: ../prefwin.glade.h:13 msgid "If enabled, an icon will appear in the system tray (also known as " msgstr "" #: ../prefwin.glade.h:14 msgid "" "If this is enabled then IP-addresses will be converted to logical names (www." "somehost.com for instance). However, lookups takes time and PureAdmin will " "be more responsive and feel faster if you uncheck this option." msgstr "" "Se abilitato gli indirizzi IP verranno convertiti in nomi logici (www." "somehost.com per esempio). Comunque, l'operazione di traduzione degli " "indirizzi consuma risorse e se quest'opzione viene disattivata, PureAdmin " "rispondera' piu' velocemente." #: ../prefwin.glade.h:15 msgid "" "If this is enabled, then PureAdmin will remember the size and position of " "the main window." msgstr "" #: ../prefwin.glade.h:16 msgid "Logging method:" msgstr "Metodi di logging:" #: ../prefwin.glade.h:17 msgid "Main" msgstr "Principale" #: ../prefwin.glade.h:18 #, fuzzy msgid "Pure-pw _command:" msgstr "Comando Pure-pw:" #: ../prefwin.glade.h:19 msgid "PureAdmin: Preferences" msgstr "PureAdmin: Preferenze" #: ../prefwin.glade.h:20 msgid "Remember window _size and position" msgstr "" #: ../prefwin.glade.h:21 #, fuzzy msgid "S_yslog" msgstr "Log di Sistema" #: ../prefwin.glade.h:22 #, fuzzy msgid "System _GroupID:" msgstr "ID Gruppo di Sistema:" #: ../prefwin.glade.h:23 #, fuzzy msgid "System _UserID:" msgstr "ID Utente di Sistema:" #: ../prefwin.glade.h:24 msgid "" "This is the binary password file that should be used. The default (\"/etc/" "pureftpd.pdb) should be fine for most users" msgstr "" "Questo e' il file binario contenente le password che bisognerebbe usare. Il " "file di default (\"/etcpureftpd.pdb) dovrebbe andare bene per la maggior " "parte degli utenti" #: ../prefwin.glade.h:25 msgid "" "This is the home directoy that will be assigned by default to new users." msgstr "" #: ../prefwin.glade.h:26 msgid "" "This is the name of pure-pw command. Use full path if it's installed in a " "non-standard location." msgstr "" "Questo e' il nome del comando pure-pw. USa il percorso completo se e' stato " "installato in una locazione non standard." #: ../prefwin.glade.h:27 msgid "" "This is the plain-text password file that should be used. The default (\"/" "etc/pureftpd.passwd\") should be fine for most users" msgstr "" "Questo e' il file testuale contenente le password che bisognerebbe usare. Il " "file di default (\"/etc/pureftpd.passwd\") dovrebbe andare bene per la " "maggior parte degli utenti" #: ../prefwin.glade.h:28 msgid "" "This is the system group id that will be assigned by default to new users." msgstr "" #: ../prefwin.glade.h:29 msgid "" "This is the system user id that will be assigned by default to new users." msgstr "" #: ../prefwin.glade.h:30 msgid "This will search the system for the external files and commands.." msgstr "" #: ../prefwin.glade.h:31 msgid "Use system encoding" msgstr "" #: ../prefwin.glade.h:32 #, fuzzy msgid "Username _encoding:" msgstr "Nome Utente:" #: ../prefwin.glade.h:33 msgid "Virtual Users" msgstr "Utenti Virtuali" #: ../prefwin.glade.h:34 msgid "" "You should avoid using non ASCII characters in your usernames. If you do use " "them, make sure this setting is set to the encoding your customers ftp " "clients understand." msgstr "" #: ../prefwin.glade.h:35 msgid "_Browse..." msgstr "_Sfoglia..." #: ../prefwin.glade.h:36 msgid "_Enable system tray notifications" msgstr "" #: ../prefwin.glade.h:37 #, fuzzy msgid "_Home directory:" msgstr "Directory Utente:" #: ../prefwin.glade.h:38 #, fuzzy msgid "_Logfile:" msgstr "File di log:" #: ../prefwin.glade.h:39 #, fuzzy msgid "_Resolve hostnames" msgstr "Risolvi i nomi" #: ../prefwin.glade.h:40 msgid "_Search system" msgstr "" #: ../prefwin.glade.h:41 msgid "_Select..." msgstr "" #: ../usermanager.glade.h:1 msgid "(0 disables restriction)" msgstr "(0 disabilita le restrizioni)" #: ../usermanager.glade.h:2 msgid "(Comma separated list, leave empty for no restriction)" msgstr "" "(Lista separata da virgole, lascia vuoto per nessuna restrizione)" #: ../usermanager.glade.h:3 msgid "(Kb/s)" msgstr "(Kb/s)" #: ../usermanager.glade.h:4 msgid "(Mb)" msgstr "(Mb)" #: ../usermanager.glade.h:5 msgid "Invalid GID" msgstr "ID Gruppo Utente non valido" #: ../usermanager.glade.h:6 msgid "Invalid UID" msgstr "ID Utente non valido" #: ../usermanager.glade.h:7 msgid "" "The users here are \"Virtual Users\" and only exist in PureFTP. Other " "users (such as normal accounts) may also be able to log in depending on your " "server-configuration." msgstr "" "Gli utenti qui presenti sono \"Utenti Virtuali\" ed esistono solo in FTP " "server. Gli altri utenti (come le normali account di sistema) possono " "loggarsi solo se previsto dalla configurazione del server." #: ../usermanager.glade.h:8 msgid "" "Enter Userinfo\n" "\n" "Please enter the required details for the user to be created. " msgstr "" "Inserisci le informazioni Utente\n" "\n" "Per favore inserisci le informazioni richieste per la creazione dell'utente." #: ../usermanager.glade.h:11 msgid "" "Set Password\n" "\n" "Enter the password you wish to set for the user." msgstr "" "Imposta Password\n" "\n" "Inserisci la password che desideri impostare per l'utente." #: ../usermanager.glade.h:14 msgid "Allowed Client IPs:" msgstr "IP client permessi:" #: ../usermanager.glade.h:15 msgid "Allowed Local IPs:" msgstr "IP locali permessi:" #: ../usermanager.glade.h:17 msgid "Change/Set Password..." msgstr "Cambia/Imposta Password..." #: ../usermanager.glade.h:18 msgid "Denied Client IPs:" msgstr "IP client negati:" #: ../usermanager.glade.h:19 msgid "Denied Local IPs:" msgstr "IP locali negati:" #: ../usermanager.glade.h:20 msgid "" "Directory where the user will be logged in to. By default, the home " "directory is also the top (root) directory." msgstr "" "Directory dove l'utente verra' loggato. Per default, la directory " "utenterisulta essere anche la directory radice. " #: ../usermanager.glade.h:21 msgid "Down:" msgstr "Down:" #: ../usermanager.glade.h:22 msgid "Fake root:" msgstr "Directory Radice:" #: ../usermanager.glade.h:23 msgid "File Ratio:" msgstr "Rapporto Up/Down" #: ../usermanager.glade.h:24 msgid "Group ID:" msgstr "ID di Gruppo:" #: ../usermanager.glade.h:25 msgid "Home Directory:" msgstr "Directory Utente:" #: ../usermanager.glade.h:26 msgid "" "If checked, then the user won't be able to browse files other than those in " "the fake root directory and its sub-directories." msgstr "" "Se attivata, l'utente sara' in grado di navigare e di accedere ai files " "appartenenti solo alla directory radice e alle sue sottodirectory" #: ../usermanager.glade.h:27 msgid "Max Bandwidth:" msgstr "Massima Banda:" #: ../usermanager.glade.h:28 msgid "Max Files:" msgstr "Massimo numero di Files:" #: ../usermanager.glade.h:29 msgid "Max Size:" msgstr "Massima grandezza:" #: ../usermanager.glade.h:30 msgid "Max sim. sessions:" msgstr "Massimo numero di sessioni contemporanee:" #: ../usermanager.glade.h:31 msgid "Maximum number of simultaneous connections by the selected user." msgstr "" "Massimo numero di sessioni contemporanee relative all'utente selezionato." #: ../usermanager.glade.h:32 msgid "Maximum speed for download for this user" msgstr "Massima velocita' di download di questo utente" #: ../usermanager.glade.h:33 msgid "Maximum speed for upload from this user" msgstr "Massima velocita' di upload di questo utente" #: ../usermanager.glade.h:34 msgid "Password:" msgstr "Password:" #: ../usermanager.glade.h:35 msgid "Personal Information" msgstr "Informazioni Personali" #: ../usermanager.glade.h:36 msgid "PureAdmin: Create new user" msgstr "PureAdmin: Crea nuovo utente" #: ../usermanager.glade.h:37 msgid "PureAdmin: Enter Password" msgstr "PureAdmin: Inserisci Password" #: ../usermanager.glade.h:38 msgid "PureAdmin: Users" msgstr "PureAdmin: Utenti" #: ../usermanager.glade.h:39 msgid "Ratio is the relations between upload and download for the user." msgstr "Rapporto e' la relazione esistente tra Upload e Download di un utente." #: ../usermanager.glade.h:40 msgid "Real Name:" msgstr "Nome Reale:" #: ../usermanager.glade.h:41 msgid "Restrictions" msgstr "Restrizioni" #: ../usermanager.glade.h:42 msgid "Set Password" msgstr "Imposta Password" #: ../usermanager.glade.h:43 msgid "The full name of the user. " msgstr "Nome completo dell'utente." #: ../usermanager.glade.h:44 msgid "The maximum file size owned by the selected user at any time." msgstr "Massima grandezza di un file posseduto dall'utente selezionato" #: ../usermanager.glade.h:45 msgid "The maximum number of files owned by the selected user." msgstr "Massimo numero di files posseduti dall'utente selezionato." #: ../usermanager.glade.h:46 msgid "The name the users uses to log in" msgstr "Il nome che l'utente usa per loggarsi" #: ../usermanager.glade.h:47 msgid "" "The timespan in which the user is able to log in (24h format). Example: 1830-" "0530" msgstr "" "Periodo temporale nel quale l'utente e' in grado di loggarsi (formato 24h). " "Esempio 1830-0530" #: ../usermanager.glade.h:48 msgid "" "This directory is the top directory where the user can browse while logged " "in." msgstr "" "Questa directory rappresenta la directory radice da cui l'utente puo' " "navigare mentre e' loggato." #: ../usermanager.glade.h:49 msgid "This is a list of all found groups above gid 100" msgstr "" "Questa e' la lista di tutti i gruppi utente con ID di gruppo superiore a 100" #: ../usermanager.glade.h:50 msgid "This is a list of all users with a uid above 100" msgstr "Questa e' la lista di tutti gli utenti con ID utente superiore a 100" #: ../usermanager.glade.h:51 msgid "Timed Restrictions:" msgstr "Restrizioni temporali:" #: ../usermanager.glade.h:52 msgid "Up:" msgstr "Up:" #: ../usermanager.glade.h:53 msgid "Use a fake root (Recommended)" msgstr "Usa la Directory Radice (Raccomandato)" #: ../usermanager.glade.h:54 msgid "User ID:" msgstr "ID Utente:" #: ../usermanager.glade.h:55 msgid "Username:" msgstr "Nome Utente:" #: ../usermanager.glade.h:56 msgid "Verify Password:" msgstr "Verifica Password:" #: ../usermanager.glade.h:57 msgid "_Add User" msgstr "_Aggiungi Utente" #: ../usermanager.glade.h:58 msgid "_Add new user..." msgstr "_Aggiungi nuovo utente..." #: ../usermanager.glade.h:59 msgid "_Cancel Changes" msgstr "_Cancella i Cambiamenti" #: ../usermanager.glade.h:60 msgid "_Edit user" msgstr "_Modifica utente" #: ../usermanager.glade.h:61 msgid "_Remove user" msgstr "_Rimuovi utente" #: ../usermanager.glade.h:62 msgid "_Save Changes" msgstr "_Salva i Cambiamenti" #: ../pureadmin.desktop.in.h:1 msgid "Administer and monitor your FTP server" msgstr "" #: ../pureadmin.desktop.in.h:2 #, fuzzy msgid "FTP Administration" msgstr " PureFTPd non e' in esecuzione" #~ msgid "[logfile]" #~ msgstr "[file di log]" #, fuzzy #~ msgid "lbl_elapsed_time" #~ msgstr "Tempo trascorso:" #, fuzzy #~ msgid "lbl_remaining_time" #~ msgstr "Tempo rimanente:" #, fuzzy #~ msgid "lbl_username" #~ msgstr "Utente" #~ msgid "0000-0000" #~ msgstr "0000-0000" #~ msgid "Couldn't find pixmap file: %s" #~ msgstr "Pixmap file non trovato: %s" #, fuzzy #~ msgid "PureFTPd running" #~ msgstr " PureFTPd non e' in esecuzione" #, fuzzy #~ msgid "Filename" #~ msgstr "Utente" #, fuzzy #~ msgid "Size" #~ msgstr "Massima grandezza:" #~ msgid "Unable to read FTP-Server data" #~ msgstr "Impossibile leggere i dati sul server FTP remoto" #~ msgid "" #~ "PureAdmin was unable to retrieve ftpserver data. This is most likely due " #~ "to insufficient permissions.\n" #~ "Try restarting PureAdmin with root privileges." #~ msgstr "" #~ "PureAdmin non e' in grado di trasferire i dati dal server FTP remoto. " #~ "Probabilmente questo e' dovuto a insufficienti permessi.\n" #~ "Prova a far ripartire PureAdmin con i privilegi di root." #~ msgid "This will reset the values to those found at startup." #~ msgstr "Questo riportera' i valori a quelli iniziali." #~ msgid "_Search/Set Defaults" #~ msgstr "_Controlla/Imposta Default" #~ msgid "" #~ "PureAdmin was unable to fetch information about your system and therefor " #~ "may not work as expected.\n" #~ "\n" #~ "The problem should be resolved if you reinstall PureAdmin." #~ msgstr "" #~ "PureAdmin non e' in grado di recuperare le informazioni sul tuo sistema e " #~ "percio'puo' non lavorare correttamente.\n" #~ "\n" #~ "Il problema dovrebbe essere risolto reinstallando PureAdmin." #~ msgid "Failed to get system info" #~ msgstr "Recupero delle informazioni di Sistema fallito" #~ msgid "-" #~ msgstr "-" #~ msgid "" #~ "The username you have entered contains invalid characters. Only standard " #~ "english letters (a-z) and the characters '@', '-', '_', '.', ',' ':' ' " #~ "' (space) and ''' (single quote) are permitted." #~ msgstr "" #~ "L'utente inserito contiene dei caratteri non validi. Sono permessi solo i " #~ "caratteri standard inglesi e i seguenti caratteri '@', '-', '_', '.', ',' " #~ "':' ' ' (spazio) e ''' (apici singole)." #~ msgid "%.1f Mb (%d Mb total)" #~ msgstr "%.1f Mb (%d Mb totali)" #~ msgid "%d Mb (%d Mb total)" #~ msgstr "%d Mb (%d Mb totali)" #~ msgid "Setup Users" #~ msgstr "Setup degli Utenti" pureadmin-0.4/po/Makefile.in.in0000644000175000017500000001530410670523033013354 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep ^$$lang$$ $(srcdir)/LINGUAS`" -o -n "`echo $$ALINGUAS|grep ' ?$$lang ?'`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all $(mkdir_p) $(DESTDIR)$(itlocaledir) linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info tags TAGS ID: # Define this as empty until I found a useful application. installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pureadmin-0.4/NEWS0000644000175000017500000001676710670514161011003 000000000000000.4 New Features: * Show list of system changes needed before using user manager * Progress bar showing download/upload progress Bug fixes: * Don't fail because the pureftpd activity directory doesn't exist. On ubuntu, it is always removed on reboot and created on first FTP login. Pureadmin now understands this * More robust handling of creating ftpuser/ftpgroup accounts and ftp directory. * Easier to enable debug output (no re-compile needed) * Check /proc to determine whether pureftpd is running or not. More robust than looking for the PID-file. * Translation updates: fr, cs, tr 0.3 New Features: * Included weblinks in the help menu to online docs and forum. * Include icons of various sizes to limit the effect of scaling from the Desktop Environment/Window Manager. * Install sized icons to the hicolor icon theme. Bug fixes: * Notification icon: - Don't show if main window has focus. - Hide when main window gets focused (and not only by clicking the icon) * Finally fix the startup-notify bug that triggered on sudo-based systems and resulted in a busy cursor for the first ~10 seconds of running pureadmin. 0.3pre1 New Features: * Added notification icon support. New connections as well as disconnections are notified in the system tray. (Configurable!) * Added rough support for using gksu (on Ubuntu and similar) to raise privilieges when libgnomesu isn't available. * Make pureadmin multi threaded: The activity fetching function is now run as a separate thread instead of blocking the main loop. Bugfixes: * Cleanup among the FAM wrapper functions. They didn't need to be as generic as I first wrote them. * Remove references to GTK+ > 2.0 symbols. PureAdmin should now run perfectly on GTK+ version 2.0 and above! * PureAdmin now detects if pureftpd is running through inetd instead of standalone. Misc: * Major code re-factoring and cleanup: use libglade for the GUI instead of glade code generation. * Upgrade to use glib-based binreloc API. Translations: * Updated Swedish translation 0.2.2 Bugfixes: * Fixed a bunch of bugs when built w/o binreloc support * Updated prefix.[ch] and acinclude.m4 to latest versions from apkg CVS. * Various fixes to the pureadminsearch script. 0.2.1 Bugfixes * Fixed a bug with a too small snprintf()-buffer * Fixed a bug when libgnomesu isn't available * Added French translation (Thanks Sébastien Loss) * Updated Swedish translation 0.2 New features: * Added customizable username encoding. * Remember window size and position * Automaticly ask for root password if needed (and possible; requires libgnomesu) * Added keyboard shortcuts to switch tabs (+1, +2) Buxfixes: * Crash when closing user manager with windowmanager and then re-opening it. * Fixed a bug when pureadmin falsely determines that user hasn't got permission to edit user-information. * Much improved UTF-8 error handling and conversion throughout the program * Major code cleanups UI/Layout: * Added a shadow to the logview and the main lists to make them stand out more. * Fixed so that enters activates the OK-button in the "New User" dialog. 0.1.12 Bugfixes: * Fixed some compiler warnings * Better handling of upload info in info-frame. * Dirbrowser now sorts entries in alphabetical order * Some UTF8 string fixes * Fixed a segfault in srv_get_activities, when pure-ftpwho failes to get activities * Italian translation added 0.1.11 Bugfixes: * Fixed size quota to actually be in Mb instead of bytes. * The configured value for password/pdbfile is now used instead of hard-coded /etc/pure-ftpd.* * Segfault occuring with corrupt /etc/group and /etc/passwd files containing empty lines fixed! * IP/Hostname shown in mainwindow is now the clients host, not the servers * UTF8 login-names and filenames should now work everywhere in the program * Usermanager didn't print newline after adding a user sometimes. * Removed silly limitation on bandwidth for users. It's now 1000kb/s instead of 100kb/s. * Added i18n/l10n support. Translators wanted!! * Added swedish translation * Added binary relocation support. hardcoded $prefix is now replaced at runtime!! (autopackage stuff) * Added autopackage spec-file * Removed the errordialogs at the startup, they are shown in the gui anyway! * Fixed a bug with make install. It didn't install everything it should... * Minor HIG-ification of the UI * Moved location for helpfiles. They're now in $prefix/share/pureadmin/docs * Better errorhandling in the helpviewer * FAM Wrapper now works and is using GIOChannel instead of depricated gdk_input_watch() 0.1.10 Bugfixes: * Activities Retreival should now work everywhere pure-ftpwho works. * Some more errordialog cleaning * Smarter handling of usermanager when running as non-root * Cleaned up the progress string in the list of activities a bit. 0.1.9 New features: * Ability to Terminate connection(s) for users. * Added popup-menu for activities and online users. * Added a debugging window for program trace output. Bugfixes: * Reding of activities is now working even if the filesize is more than the expected size (with unpredictable result!) * Fixed a rarely occurring floating point exception related to the "advanced info" frame in the main gui. * Fixed the startup errors. Now there's only one dialog for all errors. * Made FAM-related errors more human understandable. * Fixed a segfault that occurred because of a free() on a static string. 0.1.8 * Use FAM (File Alteration Monitor) for logfile-viewer. If fam isn't available, the logfile-viewer won't work. * Added start/stop of server. * Some minor UI enhancements. Bugfixes: * Logfile-viewer: Date parser completely removed - it was too buggy! * user-manager: - Changes couldn't be saved when /etc and /tmp was on different filesystems. - Bandwidth limitations are now in kb/s as the GUI says it is (it was in b/s before :-)) * GUI: - Change the progress string to display ???'s when the progress is unknown (instead of 000's and infinitive) * Preferences: - Fixed a crash that occurred when opening the prefwindow. * Compile/build: - Fixed error when struct sockaddr_in isn't defined (*BSD??) - Fixed type-o in usr_manager.h (gulong long --> gulong) * pureadminsearch: PureAdmin now honor the enviroment variables $PURE_DBFILE and $PURE_PASSWDFILE. 0.1.7 * New desktop-entry. Bugfixes: * More robust checking for pureftpd installation and binaries. * Better, but in no way perfect, logfile handling. * More dialogs that tells people what went wrong. * RedHat 9 (others?) compile error should be fixed (usr_manager.h) * and perhaps some more that I can't remember 0.1.6 Bugfixes: srv_comm.c: Directory wasn't closed and the maximum open-file-limit was reached after pureadmin has run for a while. logfile.c: - (Probably) Fixed a bug with log-dates, avoiding a segfault when the date from the log-file was improperly interpreted. - Logfile was opened more than once at the same time, allocating unnecessary file-descriptors. 0.1.5 * New dirbrowser widget * Name change Purify --> PureAdmin * Added help and some docs * Various bug fixes: - Widget sensitivity issues in user-manager. - Some build scripts (Makefile.am etc.) bugs were fixed - Type-o in the User Manager window (exits instead of exists) 0.1 Initial Release * Everything is changed ;-) * Current features: - Log file viewer - Activities viewer - User manager pureadmin-0.4/depcomp0000755000175000017500000003710010535563747011657 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: pureadmin-0.4/intltool-extract.in0000644000175000017500000005500610670523033014133 00000000000000#!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Extractor # # Copyright (C) 2000-2001, 2003 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Darin Adler # ## Release information my $PROGRAM = "intltool-extract"; my $PACKAGE = "intltool"; my $VERSION = "0.35.5"; ## Loaded modules use strict; use File::Basename; use Getopt::Long; ## Scalars used by the option stuff my $TYPE_ARG = "0"; my $LOCAL_ARG = "0"; my $HELP_ARG = "0"; my $VERSION_ARG = "0"; my $UPDATE_ARG = "0"; my $QUIET_ARG = "0"; my $SRCDIR_ARG = "."; my $FILE; my $OUTFILE; my $gettext_type = ""; my $input; my %messages = (); my %loc = (); my %count = (); my %comments = (); my $strcount = 0; my $XMLCOMMENT = ""; ## Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; ## Always print first $| = 1; ## Handle options GetOptions ( "type=s" => \$TYPE_ARG, "local|l" => \$LOCAL_ARG, "help|h" => \$HELP_ARG, "version|v" => \$VERSION_ARG, "update" => \$UPDATE_ARG, "quiet|q" => \$QUIET_ARG, "srcdir=s" => \$SRCDIR_ARG, ) or &error; &split_on_argument; ## Check for options. ## This section will check for the different options. sub split_on_argument { if ($VERSION_ARG) { &version; } elsif ($HELP_ARG) { &help; } elsif ($LOCAL_ARG) { &place_local; &extract; } elsif ($UPDATE_ARG) { &place_normal; &extract; } elsif (@ARGV > 0) { &place_normal; &message; &extract; } else { &help; } } sub place_normal { $FILE = $ARGV[0]; $OUTFILE = "$FILE.h"; my $dirname = dirname ($OUTFILE); if (! -d "$dirname" && $dirname ne "") { system ("mkdir -p $dirname"); } } sub place_local { $FILE = $ARGV[0]; $OUTFILE = fileparse($FILE, ()); if (!-e "tmp/") { system("mkdir tmp/"); } $OUTFILE = "./tmp/$OUTFILE.h" } sub determine_type { if ($TYPE_ARG =~ /^gettext\/(.*)/) { $gettext_type=$1 } } ## Sub for printing release information sub version{ print <<_EOF_; ${PROGRAM} (${PACKAGE}) $VERSION Copyright (C) 2000, 2003 Free Software Foundation, Inc. Written by Kenneth Christiansen, 2000. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. _EOF_ exit; } ## Sub for printing usage information sub help { print <<_EOF_; Usage: ${PROGRAM} [OPTION]... [FILENAME] Generates a header file from an XML source file. It grabs all strings between <_translatable_node> and its end tag in XML files. Read manpage (man ${PROGRAM}) for more info. --type=TYPE Specify the file type of FILENAME. Currently supports: "gettext/glade", "gettext/ini", "gettext/keys" "gettext/rfc822deb", "gettext/schemas", "gettext/scheme", "gettext/xml", "gettext/quoted" -l, --local Writes output into current working directory (conflicts with --update) --update Writes output into the same directory the source file reside (conflicts with --local) --srcdir Root of the source tree -v, --version Output version information and exit -h, --help Display this help and exit -q, --quiet Quiet mode Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") or send email to . _EOF_ exit; } ## Sub for printing error messages sub error{ print STDERR "Try `${PROGRAM} --help' for more information.\n"; exit; } sub message { print "Generating C format header file for translation.\n" unless $QUIET_ARG; } sub extract { &determine_type; &convert; open OUT, ">$OUTFILE"; binmode (OUT) if $^O eq 'MSWin32'; &msg_write; close OUT; print "Wrote $OUTFILE\n" unless $QUIET_ARG; } sub convert { ## Reading the file { local (*IN); local $/; #slurp mode open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!"; $input = ; } &type_ini if $gettext_type eq "ini"; &type_keys if $gettext_type eq "keys"; &type_xml if $gettext_type eq "xml"; &type_glade if $gettext_type eq "glade"; &type_scheme if $gettext_type eq "scheme"; &type_schemas if $gettext_type eq "schemas"; &type_rfc822deb if $gettext_type eq "rfc822deb"; &type_quoted if $gettext_type eq "quoted"; } sub entity_decode_minimal { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; return $_; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; s/<//g; return $_; } sub escape_char { return '\"' if $_ eq '"'; return '\n' if $_ eq "\n"; return '\\\\' if $_ eq '\\'; return $_; } sub escape { my ($string) = @_; return join "", map &escape_char, split //, $string; } sub type_ini { ### For generic translatable desktop files ### while ($input =~ /^(#(.+)\n)?^_.*=(.*)$/mg) { if (defined($2)) { $comments{$3} = $2; } $messages{$3} = []; } } sub type_keys { ### For generic translatable mime/keys files ### while ($input =~ /^\s*_\w+=(.*)$/mg) { $messages{$1} = []; } } sub type_xml { ### For generic translatable XML files ### my $tree = readXml($input); parseTree(0, $tree); } sub print_var { my $var = shift; my $vartype = ref $var; if ($vartype =~ /ARRAY/) { my @arr = @{$var}; print "[ "; foreach my $el (@arr) { print_var($el); print ", "; } print "] "; } elsif ($vartype =~ /HASH/) { my %hash = %{$var}; print "{ "; foreach my $key (keys %hash) { print "$key => "; print_var($hash{$key}); print ", "; } print "} "; } else { print $var; } } # Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment) sub getAttributeString { my $sub = shift; my $do_translate = shift || 1; my $language = shift || ""; my $translate = shift; my $result = ""; foreach my $e (reverse(sort(keys %{ $sub }))) { my $key = $e; my $string = $sub->{$e}; my $quote = '"'; $string =~ s/^[\s]+//; $string =~ s/[\s]+$//; if ($string =~ /^'.*'$/) { $quote = "'"; } $string =~ s/^['"]//g; $string =~ s/['"]$//g; ## differences from intltool-merge.in.in if ($key =~ /^_/) { $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT; $messages{entity_decode($string)} = []; $$translate = 2; } ## differences end here from intltool-merge.in.in $result .= " $key=$quote$string$quote"; } return $result; } # Verbatim copy from intltool-merge.in.in sub getXMLstring { my $ref = shift; my $spacepreserve = shift || 0; my @list = @{ $ref }; my $result = ""; my $count = scalar(@list); my $attrs = $list[0]; my $index = 1; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); while ($index < $count) { my $type = $list[$index]; my $content = $list[$index+1]; if (! $type ) { # We've got CDATA if ($content) { # lets strip the whitespace here, and *ONLY* here $content =~ s/\s+/ /gs if (!$spacepreserve); $result .= $content; } } elsif ( "$type" ne "1" ) { # We've got another element $result .= "<$type"; $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements if ($content) { my $subresult = getXMLstring($content, $spacepreserve); if ($subresult) { $result .= ">".$subresult . ""; } else { $result .= "/>"; } } else { $result .= "/>"; } } $index += 2; } return $result; } # Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed # Translate list of nodes if necessary sub translate_subnodes { my $fh = shift; my $content = shift; my $language = shift || ""; my $singlelang = shift || 0; my $spacepreserve = shift || 0; my @nodes = @{ $content }; my $count = scalar(@nodes); my $index = 0; while ($index < $count) { my $type = $nodes[$index]; my $rest = $nodes[$index+1]; traverse($fh, $type, $rest, $language, $spacepreserve); $index += 2; } } # Based on traverse() in intltool-merge.in.in sub traverse { my $fh = shift; # unused, to allow us to sync code between -merge and -extract my $nodename = shift; my $content = shift; my $language = shift || ""; my $spacepreserve = shift || 0; if ($nodename && "$nodename" eq "1") { $XMLCOMMENT = $content; } elsif ($nodename) { # element my @all = @{ $content }; my $attrs = shift @all; my $translate = 0; my $outattr = getAttributeString($attrs, 1, $language, \$translate); if ($nodename =~ /^_/) { $translate = 1; $nodename =~ s/^_//; } my $lookup = ''; $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); if ($translate) { $lookup = getXMLstring($content, $spacepreserve); if (!$spacepreserve) { $lookup =~ s/^\s+//s; $lookup =~ s/\s+$//s; } if ($lookup && $translate != 2) { $comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT; $messages{$lookup} = []; } elsif ($translate == 2) { translate_subnodes($fh, \@all, $language, 1, $spacepreserve); } } else { $XMLCOMMENT = ""; my $count = scalar(@all); if ($count > 0) { my $index = 0; while ($index < $count) { my $type = $all[$index]; my $rest = $all[$index+1]; traverse($fh, $type, $rest, $language, $spacepreserve); $index += 2; } } } $XMLCOMMENT = ""; } } # Verbatim copy from intltool-merge.in.in, $fh for compatibility sub parseTree { my $fh = shift; my $ref = shift; my $language = shift || ""; my $name = shift @{ $ref }; my $cont = shift @{ $ref }; while (!$name || "$name" eq "1") { $name = shift @{ $ref }; $cont = shift @{ $ref }; } my $spacepreserve = 0; my $attrs = @{$cont}[0]; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); traverse($fh, $name, $cont, $language, $spacepreserve); } # Verbatim copy from intltool-merge.in.in sub intltool_tree_comment { my $expat = shift; my $data = $expat->original_string(); my $clist = $expat->{Curlist}; my $pos = $#$clist; $data =~ s/^$//s; push @$clist, 1 => $data; } # Verbatim copy from intltool-merge.in.in sub intltool_tree_cdatastart { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; push @$clist, 0 => $expat->original_string(); } # Verbatim copy from intltool-merge.in.in sub intltool_tree_cdataend { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; $clist->[$pos] .= $expat->original_string(); } # Verbatim copy from intltool-merge.in.in sub intltool_tree_char { my $expat = shift; my $text = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; # Use original_string so that we retain escaped entities # in CDATA sections. # if ($pos > 0 and $clist->[$pos - 1] eq '0') { $clist->[$pos] .= $expat->original_string(); } else { push @$clist, 0 => $expat->original_string(); } } # Verbatim copy from intltool-merge.in.in sub intltool_tree_start { my $expat = shift; my $tag = shift; my @origlist = (); # Use original_string so that we retain escaped entities # in attribute values. We must convert the string to an # @origlist array to conform to the structure of the Tree # Style. # my @original_array = split /\x/, $expat->original_string(); my $source = $expat->original_string(); # Remove leading tag. # $source =~ s|^\s*<\s*(\S+)||s; # Grab attribute key/value pairs and push onto @origlist array. # while ($source) { if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; push @origlist, $1; push @origlist, '"' . $2 . '"'; } elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; push @origlist, $1; push @origlist, "'" . $2 . "'"; } else { last; } } my $ol = [ { @origlist } ]; push @{ $expat->{Lists} }, $expat->{Curlist}; push @{ $expat->{Curlist} }, $tag => $ol; $expat->{Curlist} = $ol; } # Copied from intltool-merge.in.in and added comment handler. sub readXml { my $xmldoc = shift || return; my $ret = eval 'require XML::Parser'; if(!$ret) { die "You must have XML::Parser installed to run $0\n\n"; } my $xp = new XML::Parser(Style => 'Tree'); $xp->setHandlers(Char => \&intltool_tree_char); $xp->setHandlers(Start => \&intltool_tree_start); $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); ## differences from intltool-merge.in.in $xp->setHandlers(Comment => \&intltool_tree_comment); ## differences end here from intltool-merge.in.in my $tree = $xp->parse($xmldoc); #print_var($tree); # Hello thereHowdydo # would be: # [foo, [{}, 1, "comment", head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, # [{}, 0, "Howdy", ref, [{}]], 0, "do" ] ] return $tree; } sub type_schemas { ### For schemas XML files ### # FIXME: We should handle escaped < (less than) while ($input =~ / \s* (\s*(?:\s*)?(.*?)\s*<\/default>\s*)? (\s*(?:\s*)?(.*?)\s*<\/short>\s*)? (\s*(?:\s*)?(.*?)\s*<\/long>\s*)? <\/locale> /sgx) { my @totranslate = ($3,$6,$9); my @eachcomment = ($2,$5,$8); foreach (@totranslate) { my $currentcomment = shift @eachcomment; next if !$_; s/\s+/ /g; $messages{entity_decode_minimal($_)} = []; $comments{entity_decode_minimal($_)} = $currentcomment if (defined($currentcomment)); } } } sub type_rfc822deb { ### For rfc822-style Debian configuration files ### my $lineno = 1; my $type = ''; while ($input =~ /\G(.*?)(^|\n)(_+)([^:]+):[ \t]*(.*?)(?=\n\S|$)/sg) { my ($pre, $newline, $underscore, $tag, $text) = ($1, $2, $3, $4, $5); while ($pre =~ m/\n/g) { $lineno ++; } $lineno += length($newline); my @str_list = rfc822deb_split(length($underscore), $text); for my $str (@str_list) { $strcount++; $messages{$str} = []; $loc{$str} = $lineno; $count{$str} = $strcount; my $usercomment = ''; while($pre =~ s/(^|\n)#([^\n]*)$//s) { $usercomment = "\n" . $2 . $usercomment; } $comments{$str} = $tag . $usercomment; } $lineno += ($text =~ s/\n//g); } } sub rfc822deb_split { # Debian defines a special way to deal with rfc822-style files: # when a value contain newlines, it consists of # 1. a short form (first line) # 2. a long description, all lines begin with a space, # and paragraphs are separated by a single dot on a line # This routine returns an array of all paragraphs, and reformat # them. # When first argument is 2, the string is a comma separated list of # values. my $type = shift; my $text = shift; $text =~ s/^[ \t]//mg; return (split(/, */, $text, 0)) if $type ne 1; return ($text) if $text !~ /\n/; $text =~ s/([^\n]*)\n//; my @list = ($1); my $str = ''; for my $line (split (/\n/, $text)) { chomp $line; if ($line =~ /^\.\s*$/) { # New paragraph $str =~ s/\s*$//; push(@list, $str); $str = ''; } elsif ($line =~ /^\s/) { # Line which must not be reformatted $str .= "\n" if length ($str) && $str !~ /\n$/; $line =~ s/\s+$//; $str .= $line."\n"; } else { # Continuation line, remove newline $str .= " " if length ($str) && $str !~ /\n$/; $str .= $line; } } $str =~ s/\s*$//; push(@list, $str) if length ($str); return @list; } sub type_quoted { while ($input =~ /\"(([^\"]|\\\")*[^\\\"])\"/g) { my $message = $1; my $before = $`; $message =~ s/\\\"/\"/g; $before =~ s/[^\n]//g; $messages{$message} = []; $loc{$message} = length ($before) + 2; } } sub type_glade { ### For translatable Glade XML files ### my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message"; while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) { # Glade sometimes uses tags that normally mark translatable things for # little bits of non-translatable content. We work around this by not # translating strings that only includes something like label4 or window1. $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label|dialog)[0-9]+$/; } while ($input =~ /(..[^<]*)<\/items>/sg) { for my $item (split (/\n/, $1)) { $messages{entity_decode($item)} = []; } } ## handle new glade files while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"(?:\s+[^>]*comments\s*=\s*"([^"]*)")?[^>]*>([^<]+)<\/\1>/sg) { $messages{entity_decode($3)} = [] unless $3 =~ /^(window|label)[0-9]+$/; if (defined($2) and !($3 =~ /^(window|label)[0-9]+$/)) { $comments{entity_decode($3)} = entity_decode($2) ; } } while ($input =~ /]*)"\s+description="([^>]+)"\/>/sg) { $messages{entity_decode_minimal($2)} = []; } } sub type_scheme { my ($line, $i, $state, $str, $trcomment, $char); for $line (split(/\n/, $input)) { $i = 0; $state = 0; # 0 - nothing, 1 - string, 2 - translatable string while ($i < length($line)) { if (substr($line,$i,1) eq "\"") { if ($state == 2) { $comments{$str} = $trcomment if ($trcomment); $messages{$str} = []; $str = ''; $state = 0; $trcomment = ""; } elsif ($state == 1) { $str = ''; $state = 0; $trcomment = ""; } else { $state = 1; $str = ''; if ($i>0 && substr($line,$i-1,1) eq '_') { $state = 2; } } } elsif (!$state) { if (substr($line,$i,1) eq ";") { $trcomment = substr($line,$i+1); $trcomment =~ s/^;*\s*//; $i = length($line); } elsif ($trcomment && substr($line,$i,1) !~ /\s|\(|\)|_/) { $trcomment = ""; } } else { if (substr($line,$i,1) eq "\\") { $char = substr($line,$i+1,1); if ($char ne "\"" && $char ne "\\") { $str = $str . "\\"; } $i++; } $str = $str . substr($line,$i,1); } $i++; } } } sub msg_write { my @msgids; if (%count) { @msgids = sort { $count{$a} <=> $count{$b} } keys %count; } else { @msgids = sort keys %messages; } for my $message (@msgids) { my $offsetlines = 1; $offsetlines++ if $message =~ /%/; if (defined ($comments{$message})) { while ($comments{$message} =~ m/\n/g) { $offsetlines++; } } print OUT "# ".($loc{$message} - $offsetlines). " \"$FILE\"\n" if defined $loc{$message}; print OUT "/* ".$comments{$message}." */\n" if defined $comments{$message}; print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/; my @lines = split (/\n/, $message, -1); for (my $n = 0; $n < @lines; $n++) { if ($n == 0) { print OUT "char *s = N_(\""; } else { print OUT " \""; } print OUT escape($lines[$n]); if ($n < @lines - 1) { print OUT "\\n\"\n"; } else { print OUT "\");\n"; } } } } pureadmin-0.4/COPYING0000644000175000017500000004311010667602725011327 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. pureadmin-0.4/autopackage/0000777000175000017500000000000010670523442012635 500000000000000pureadmin-0.4/autopackage/pureadmin.apspec.in0000644000175000017500000000333610667602724016353 00000000000000# -*-shell-script-*- [Meta] ShortName: pureadmin SoftwareVersion: @VERSION@ DisplayName: PureAdmin - Graphical FTP Server Manager RootName: @pureadmin.org/pureadmin:@VERSION@ Summary: A graphical interface to the PureFTPd FTP-server Maintainer: Isak Savo Packager: Isak Savo DisplayName[sv]: PureAdmin - Grafiskt FTP-server program Summary[sv]: Ett grafiskt gränssnitt till PureFTPd FTP-server License: GNU General Public License, Version 2 AutopackageTarget: 1.0 [Description] PureAdmin is a graphical front-end to the PureFTPd FTP-server that allows you to view and monitor what is happening on your server. I also contains an user manager where you can add, edit or remove FTP-users. [Description:sv] PureAdmin är ett grafiskt program som arbetar mot PureFTPd och visar information om vad som händer på din server. Du kan även lägga till, ändra och ta bort användare från din server. [BuildPrepare] #export APBUILD_INCLUDE="/usr/local/gtk-headers/2.2" prepareBuild [BuildUnprepare] unprepareBuild [Globals] [Prepare] require "@gtk.org/gtk" 2 outputTest "FAM (File Alteration Monitor)" if testForLib libfam.so; then outputTestPass; else outputTestFail; outputFail "You need FAM to be able to run PureAdmin."; fi if ! which gksudo > /dev/null; then # We don't need libgnomesu on system that has gksudo recommend "@gnome.org/libgnomesu" 1 fi [Imports] import < 6 PureAdmin: Preferences GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True True True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False False True False 6 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END True True True True GTK_POS_TOP False False 6 True False 18 True False 6 True <b>Network</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.490000009537 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True If this is enabled then IP-addresses will be converted to logical names (www.somehost.com for instance). However, lookups takes time and PureAdmin will be more responsive and feel faster if you uncheck this option. True _Resolve hostnames True GTK_RELIEF_NORMAL True False False True 0 False False 0 False True 0 False True True False 6 True <b>Settings</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 6 True If this is enabled, then PureAdmin will remember the size and position of the main window. True Remember window _size and position True GTK_RELIEF_NORMAL True False False True 0 False False True If enabled, an icon will appear in the system tray (also known as True _Enable system tray notifications True GTK_RELIEF_NORMAL True False False True 0 False False True Always notify finished activities True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True 0 False True 0 False True False True True Main False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 6 True False 3 True <b>Group and User Defaults</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 6 3 False 6 6 True This is the system user id that will be assigned by default to new users. True -1 1 2 0 1 True This is the home directoy that will be assigned by default to new users. True True True 0 True * False 1 2 2 3 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True _Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 2 3 2 3 fill True <b>Character Encoding</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 3 3 4 fill True System _UserID: True False GTK_JUSTIFY_RIGHT False False 0 0.5 20 0 opt_menu_uid PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 True System _GroupID: True False GTK_JUSTIFY_RIGHT False False 0 0.5 20 0 opt_menu_gid PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 True _Home directory: True False GTK_JUSTIFY_RIGHT False False 0 0.5 20 0 entry_home PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True This is the system group id that will be assigned by default to new users. True -1 1 2 1 2 True False You should avoid using non ASCII characters in your usernames. If you do use them, make sure this setting is set to the encoding your customers ftp clients understand. True False True 0 True * False 1 2 5 6 True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-index 4 0.5 0.5 0 0 0 False False True _Select... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 2 3 5 6 fill True Username _encoding: True False GTK_JUSTIFY_RIGHT False False 0 0.5 20 0 entry_encoding PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True True Use system encoding True GTK_RELIEF_NORMAL True True False True 0 3 4 5 20 fill 0 False True False True True Virtual Users False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 6 True False 3 True False 6 True <b>User Management</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 4 3 False 6 6 True Default _password file: True False GTK_JUSTIFY_LEFT False False 0 0 0 0 entry_passwd_file PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True Default pure_db file: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 entry_pdb_file PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True This is the binary password file that should be used. The default ("/etc/pureftpd.pdb) should be fine for most users True True True 0 True * False 1 2 2 3 158 True This is the name of pure-pw command. Use full path if it's installed in a non-standard location. True True True 0 True * False 1 2 0 1 True This is the plain-text password file that should be used. The default ("/etc/pureftpd.passwd") should be fine for most users True True True 0 True * False 1 2 1 2 6 True This will search the system for the external files and commands.. True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-refresh 4 0.5 0.5 0 0 0 False False True _Search system True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 3 3 4 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 2 3 2 3 fill True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 2 3 1 2 fill True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 2 3 0 1 fill True Pure-pw _command: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 entry_purepw_cmd PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill 0 True True 0 True True 0 False False True False 6 True <b>Logging</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 2 3 False 6 6 True Logging method: False False GTK_JUSTIFY_LEFT False False 0 0.10000000149 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True _Logfile: True False GTK_JUSTIFY_LEFT False False 0 0 0 0 entry_logfile PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True _Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 2 3 1 2 fill True False 0 True True S_yslog True GTK_RELIEF_NORMAL True False False True 0 False False True True C_ustom True GTK_RELIEF_NORMAL True False False True rdo_syslog 0 False False 1 3 0 1 fill True True True True 0 True * False 1 2 1 2 0 True True 0 True True 0 True True False True True External False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True pureadmin-0.4/compile0000755000175000017500000000717310535563747011667 00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2005-05-14.22 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` # Create the lock directory. # Note: use `[/.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: pureadmin-0.4/dialogs.glade0000644000175000017500000010112310667602725012713 00000000000000 6 Abour PureAdmin GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False True True True GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_CENTER True False True True False 6 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 6 True logo.png 0.5 0 0 0 0 False True True True <span weight="bold" size="x-large">PureAdmin </span> False True GTK_JUSTIFY_CENTER False True 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True A graphical configuration and management utility for the Pure Ftp server. PureAdmin webpage: http://purify.sourceforge.net/ PureFTPd webpage: http://www.pureftpd.org/ False True GTK_JUSTIFY_LEFT True True 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True <span size="small">Copyright (C) 2003 Isak Savo</span> False True GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True <span size="small">Released under the terms of the GNU General Public Licence.</span> False True GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True Closes the selected up- or download. Close _Transfer True True Closes all connections and transfers for the selected user Close _All User Connections True True True Open the user editor and shows the selected users' information _Show User Information True True usericon.png 0.5 0.5 0 0 6 Select Character Encoding GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 300 400 True True True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False False True False 6 True GTK_BUTTONBOX_END True True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END True False 6 True False 6 True _Filter True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entry_filter PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True True 0 True * True 0 True True 0 False True True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False False False 0 True True 0 True True 6 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False False True False 12 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 0 6 True False 12 True gtk-dialog-error 6 0.5 0 0 0 0 False True True True False True GTK_JUSTIFY_LEFT True True 0.5 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True _Don't show this message again True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True 6 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False False True False 12 True GTK_BUTTONBOX_END 0 False True GTK_PACK_END 6 True False 12 True gtk-dialog-question 6 0.5 0 0 0 0 False True True True False True GTK_JUSTIFY_LEFT True True 0.5 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 5 Apply System Changes GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True 550 350 True True True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False False True False 12 True GTK_BUTTONBOX_END True True True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True GTK_RELIEF_NORMAL True -8 True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-yes 4 0.5 0.5 0 0 0 False False True Yes, Apply Changes True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False True GTK_PACK_END True False 6 True False 12 True gtk-dialog-warning 6 0.5 0 0 0 0 False False True True <span weight="bold" size="large">System needs preparation.</span> In order for the user manager to work, some changes needs to be done to your system. The list below contains the actions PureAdmin will take if you click on yes. Please review and optionally change them before you proceed. False True GTK_JUSTIFY_LEFT True True 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 True True 0 False False 200 100 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True False False True False False False 0 True True 0 True True pureadmin-0.4/Makefile.in0000644000175000017500000005764010670523037012346 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in \ $(top_srcdir)/autopackage/pureadmin.apspec.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ compile config.guess config.sub depcomp install-sh missing \ mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = autopackage/pureadmin.apspec SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(desktopdir)" desktopDATA_INSTALL = $(INSTALL_DATA) DATA = $(desktop_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_DEBUG = @ENABLE_DEBUG@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@ INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@ INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_ICONV = @INTLTOOL_ICONV@ INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@ INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@ INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@ INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@ INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@ INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@ INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@ INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@ INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@ INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@ INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@ INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@ INTLTOOL_XGETTEXT = @INTLTOOL_XGETTEXT@ INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@ INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUBDIRS = src po # Install and i18n-ify the desktop-file desktopdir = $(datadir)/applications desktop_in_files = pureadmin.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) GLADEFILES = \ dialogs.glade \ mainwindow.glade \ prefwin.glade \ usermanager.glade GLADEFILES_BACKUP = \ $(GLADEFILES:.glade=.glade.bak) \ $(GLADEFILES:.glade=.glade~) EXTRA_DIST = \ autogen.sh \ pureadmin.desktop \ autopackage/pureadmin.apspec.in \ $(desktop_in_files) \ intltool-extract.in intltool-merge.in intltool-update.in \ $(GLADEFILES) DISTCLEANFILES = \ intltool-extract\ intltool-merge \ intltool-update \ $(GLADEFILES_BACKUP) CLEANFILES = \ $(desktop_DATA) ICONSIZES = \ 16x16 \ 24x24 \ 32x32 \ 48x48 iconthemebasedir = $(DESTDIR)$(datadir)/icons/hicolor all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) autopackage/pureadmin.apspec: $(top_builddir)/config.status $(top_srcdir)/autopackage/pureadmin.apspec.in cd $(top_builddir) && $(SHELL) ./config.status $@ uninstall-info-am: install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) test -z "$(desktopdir)" || $(mkdir_p) "$(DESTDIR)$(desktopdir)" @list='$(desktop_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(desktopDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(desktopdir)/$$f'"; \ $(desktopDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(desktopdir)/$$f"; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(desktopdir)/$$f'"; \ rm -f "$(DESTDIR)$(desktopdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/autopackage $(distdir)/po @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(desktopdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-data-local install-desktopDATA install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-desktopDATA uninstall-info-am uninstall-local uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-recursive ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-recursive distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-desktopDATA \ install-exec install-exec-am install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-desktopDATA uninstall-info-am uninstall-local @INTLTOOL_DESKTOP_RULE@ install-icon-theme: @$(mkinstalldirs) $(DESTDIR)$(datadir)/icons/; @for iconsize in $(ICONSIZES); do \ iconthemedir=$(iconthemebasedir)/$$iconsize/apps; \ $(mkinstalldirs) $$iconthemedir; \ $(INSTALL_DATA) $(srcdir)/pixmaps/pureadmin-$$iconsize.png $$iconthemedir/pureadmin.png; \ done; @if test -z "$(DESTDIR)"; then \ if which gtk-update-icon-cache > /dev/null; then \ echo "Updating icon cache in $(iconthemebasedir)"; \ gtk-update-icon-cache "$(iconthemebasedir)" || true; \ fi; \ else \ echo "Skipping icon theme cache update in $(iconthemebasedir)"; \ fi; install-docs: @$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/docs; @for doc in $(srcdir)/docs/*.txt; do \ if test -f $$doc; then \ $(INSTALL_DATA) $$doc $(DESTDIR)$(pkgdatadir)/docs;\ fi; \ done; install-glade: @$(mkinstalldirs) $(DESTDIR)$(pkgdatadir) @for glade in $(GLADEFILES); do \ if test -f $$glade; then \ $(INSTALL_DATA) $$glade $(DESTDIR)$(pkgdatadir);\ fi; \ done; install-pixmaps: $(mkinstalldirs) $(DESTDIR)$(datadir)/pixmaps; $(INSTALL_DATA) $(srcdir)/pixmaps/pureadmin-48x48.png $(DESTDIR)$(datadir)/pixmaps/pureadmin.png; $(mkinstalldirs) $(DESTDIR)$(pkgdatadir); \ for pixmap in $(srcdir)/pixmaps/*.png; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir); \ fi; \ done; install-data-local: install-icon-theme install-docs install-glade install-pixmaps @$(NORMAL_INSTALL) uninstall-local: rm -f $(DESTDIR)$(datadir)/pixmaps/$(PACKAGE).png; rm -rf $(DESTDIR)$(pkgdatadir); rm -rf $(DESTDIR)$(datadir)/doc/$(PACKAGE); for iconsize in $(ICONSIZES); do \ iconthemedir=$(iconthemebasedir)/$$iconsize/apps; \ rm -f $$iconthemedir/pureadmin.png; \ done; dist-hook: if test -d pixmaps; then \ mkdir $(distdir)/pixmaps; \ for pixmap in pixmaps/*; do \ if test -f $$pixmap; then \ cp -p $$pixmap $(distdir)/pixmaps; \ fi \ done \ fi; \ mkdir -p $(distdir)/docs ; \ for file in docs/*.txt; do \ if test -f $$file; then \ cp -p $$file $(distdir)/docs; \ fi \ done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pureadmin-0.4/Makefile.am0000644000175000017500000000573210667602725012340 00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = src po # Install and i18n-ify the desktop-file desktopdir = $(datadir)/applications desktop_in_files = pureadmin.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ GLADEFILES = \ dialogs.glade \ mainwindow.glade \ prefwin.glade \ usermanager.glade GLADEFILES_BACKUP = \ $(GLADEFILES:.glade=.glade.bak) \ $(GLADEFILES:.glade=.glade~) EXTRA_DIST = \ autogen.sh \ pureadmin.desktop \ autopackage/pureadmin.apspec.in \ $(desktop_in_files) \ intltool-extract.in intltool-merge.in intltool-update.in \ $(GLADEFILES) DISTCLEANFILES = \ intltool-extract\ intltool-merge \ intltool-update \ $(GLADEFILES_BACKUP) CLEANFILES = \ $(desktop_DATA) ICONSIZES = \ 16x16 \ 24x24 \ 32x32 \ 48x48 iconthemebasedir=$(DESTDIR)$(datadir)/icons/hicolor install-icon-theme: @$(mkinstalldirs) $(DESTDIR)$(datadir)/icons/; @for iconsize in $(ICONSIZES); do \ iconthemedir=$(iconthemebasedir)/$$iconsize/apps; \ $(mkinstalldirs) $$iconthemedir; \ $(INSTALL_DATA) $(srcdir)/pixmaps/pureadmin-$$iconsize.png $$iconthemedir/pureadmin.png; \ done; @if test -z "$(DESTDIR)"; then \ if which gtk-update-icon-cache > /dev/null; then \ echo "Updating icon cache in $(iconthemebasedir)"; \ gtk-update-icon-cache "$(iconthemebasedir)" || true; \ fi; \ else \ echo "Skipping icon theme cache update in $(iconthemebasedir)"; \ fi; install-docs: @$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/docs; @for doc in $(srcdir)/docs/*.txt; do \ if test -f $$doc; then \ $(INSTALL_DATA) $$doc $(DESTDIR)$(pkgdatadir)/docs;\ fi; \ done; install-glade: @$(mkinstalldirs) $(DESTDIR)$(pkgdatadir) @for glade in $(GLADEFILES); do \ if test -f $$glade; then \ $(INSTALL_DATA) $$glade $(DESTDIR)$(pkgdatadir);\ fi; \ done; install-pixmaps: $(mkinstalldirs) $(DESTDIR)$(datadir)/pixmaps; $(INSTALL_DATA) $(srcdir)/pixmaps/pureadmin-48x48.png $(DESTDIR)$(datadir)/pixmaps/pureadmin.png; $(mkinstalldirs) $(DESTDIR)$(pkgdatadir); \ for pixmap in $(srcdir)/pixmaps/*.png; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir); \ fi; \ done; install-data-local: install-icon-theme install-docs install-glade install-pixmaps @$(NORMAL_INSTALL) uninstall-local: rm -f $(DESTDIR)$(datadir)/pixmaps/$(PACKAGE).png; rm -rf $(DESTDIR)$(pkgdatadir); rm -rf $(DESTDIR)$(datadir)/doc/$(PACKAGE); for iconsize in $(ICONSIZES); do \ iconthemedir=$(iconthemebasedir)/$$iconsize/apps; \ rm -f $$iconthemedir/pureadmin.png; \ done; dist-hook: if test -d pixmaps; then \ mkdir $(distdir)/pixmaps; \ for pixmap in pixmaps/*; do \ if test -f $$pixmap; then \ cp -p $$pixmap $(distdir)/pixmaps; \ fi \ done \ fi; \ mkdir -p $(distdir)/docs ; \ for file in docs/*.txt; do \ if test -f $$file; then \ cp -p $$file $(distdir)/docs; \ fi \ done; pureadmin-0.4/missing0000755000175000017500000002540610535563747011707 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: pureadmin-0.4/docs/0000777000175000017500000000000010670523443011302 500000000000000pureadmin-0.4/docs/index.txt0000644000175000017500000000116410667602721013073 00000000000000PureAdmin - Help Contents ========================= Introduction - Brief introduction to PureAdmin and what it can and can not do. Main Window - Describes the features of the main window. User Manager - Information about virtual users and how to add/remove/modify them. Preferences - Explains what the preferences do. More, and up-to-date information can be found on the documentation section on PureAdmins web page: http://purify.sourceforge.net/index.php?page=documentation You can also ask for help in the user forums: http://purify.sourceforge.net/forumspureadmin-0.4/docs/introduction.txt0000644000175000017500000000114210667602721014501 00000000000000Introduction ============ PureAdmin is a tool which is designed to make it easier to manage and administrate a PureFTPd ftp-server. Currently, PureAdmin has the following features. * User-manager where you can add, edit or remove users. * Activities-viewer which lets you view what's happening on the server (dl, ul and online users) * Log file-viewer that presents the log file output for a specified amount of days back in time. You can get more detailed help by selecting the corresponding chapter from the menu above. Copyright (C) 2003 - Isak Savo pureadmin-0.4/docs/main_window.txt0000644000175000017500000000305010667602721014273 00000000000000Main Window =========== Activity Tab ------------ The main window is where all activities are shown. The screen is divided into "Uploads and Downloads" and "Online Users". The first shows a list of all current up- and downloads, with detailed information about progress and time. The "Online Users" list shows just that; what users are currently connected. There will be one entry for each user and host. This means that if user 'foo' uses a threaded ftp-client (such as gFTP or LeechFTP for windows) then there will be only one entry but the number of connections will be shown in the third column. On the other hand; if you have a user called 'family' which you have for all your relatives, then if mum is connected from home while dad connects from his office, they will be given two entries. Logging Tab ----------- This is simply a filtered reading from the specified logging facility. Only information related to PureFTPd will be shown, so it won't be cluttered with i.e. kernel-messages (when using syslog). This is accomplished using simple string-matching so it is not't fool-proof. Contact me if you see things that you think does not belong there. (iso01001@student.mdh.se) To change the view to only display the most reasent log-entries, simply set the number-entry to the number of days you prefer. Please note that this can take som time since the entire logfile will be re-read. The buttons 'Re-read logfile' and 'Clear' are pretty self-explaining. Note though that 'Re-read logfile' will display the contents according to the current days-limit setting. pureadmin-0.4/docs/preferences.txt0000644000175000017500000000563010667602721014267 00000000000000Preferences =========== Main tab -------- - Resolve hostnames: Check this if you want to see human-readable hostnames instead of plain IP-adresses. Please note that name lookups takes some time and the program may seem non-responsive if there are many connections. - Remember Window size... If you enable this, pureadmin will restore its previous position and size. It will also save the position of the dividers (the "grab handlers" you can use to change size of the "online users" list versus the "activities" list. - Enable notification icon If enabled, a small icon will appear in the notification area of your desktop when something happens on your server, such as a new user logged in or someone disconnected. Virtual Users ------------- - System UserID: Set this to the preferred default system id to use when adding new users. This is only a default-value and can of course be changed for each user once they are added. - System GroupID: Same as above but the group. - Home Directory: This is the default choise for home-directory when creating a new user. As with the system ids, this is only a default and can be changed on a per-user basis. External -------- Note: These options are autodeteced when PureAdmin is launched for the first time so there shouldn't be any need to change them unless something changes with the PureFTPd installation. * User Management - Pure-pw command: The name of the pure-pw command, with optional full path. - Default password file: The password-file to use when adding users. If not explicity changed when pureftpd was installed, use /etc/pureftpd.passwd - Default puredb-file: The binary version of the above file. This is the file that the ftpserver is using. Set to /etc/pureftpd.pdb if unsure. - Character encoding: If you want to use non-ASCII characters in your usernames you must make sure that you use a character encoding that your ftp clients understand. By default, pureadmin will use the encoding that you run for the rest of your system (try run 'locale' to find out), but this may cause trouble with your ftp-clients. It is recommended that you only use English characters and numbers for your usernames. Certain characters are also safe, such as the underscore (`_'), punktuation (`.') and some others. * Logging - Logging method: Choose the method that PureFTPd uses for logging. If unsure, try syslog, and the file /var/log/messages. You can check the method by checking the startup script and/or configuration-file for PureFTPd. - Logfile: The file that should be watched for logging. Defaults are /var/log/messages (syslog) /var/log/pureftpd.log (custom) pureadmin-0.4/docs/user_manager.txt0000644000175000017500000000511510667602721014434 00000000000000User Manager ============ Introduction ------------ The User Manager lets you control the virtual accounts of your ftp-server. A virtual account is an account that only exists in PureFTPd. There are several advantages of this approach: * Security: These users can only log on to your ftp-server an not on the entire system. You can also chroot them and map them to a non-privileged system users to increase security. * Customization: Users can be assigned individual quotas and limits with a high level of precision. Before using virtual users --------------------------- If you plan to use virtual users on your ftp-server then the first thing you should do is to create an unprivileged user and group that is dedicated to those users. This is because all virtual users need an existing system user so that the operating system knows the privileges of the logged on user. To create those, issue the following commands (as root): Linux/OpenBSD: groupadd ftpgroup useradd -g ftpgroup -d /dev/null -s /etc ftpuser FreeBSD: pw groupadd ftpgroup pw useradd ftpuser -g ftpgroup -d /dev/null -s /etc You should now set this group and user as a default for all virtual users. (see preferences for more details). Description of fields --------------------- Username: This is the name the user uses to log on to your server. Fake root: When "Use a fake root" is enabled, the user will see the 'fake-root directory' as his/hers root directory. By using this, you can restrict certain users to a limited part of your file system. Normally, the fake-root is the same as the home- directory. UserID,GroupID: The system user and group that the virtual user will inherit its privileges from. MaxBandwidth: Controls the speed of the data flow to and from the specific user. MaxFiles: The maximum number of files the specific user can own at the same time. MaxSize: The maximum size (MB) of the files owned by the specific user. FileRatio: The up/down ratio TimedRestrictions: Controls at what time-interval the user is allowed to LOG ON. It has no effect on users already logged on to your server. MaxSimSessions: This controls how many simultaneous connections the specified user can have at any given time. IP-Fields: These are comma separated lists of ip/mask pairs that will be denied/allowed to log on. Adding Users ------------ To add a user, click on the 'Add User...' button. You will then be asked for a username and a password. Enter these and your user is created and can be used instantaneously. You may also fine-tune the personal info and restrictions if you want. pureadmin-0.4/install-sh0000755000175000017500000002202110535563747012302 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: