--- fdisk/cfdisk.c.orig 2005-09-09 14:44:57.000000000 -0700 +++ fdisk/cfdisk.c 2006-09-02 21:34:32.000000000 -0700 @@ -2100,7 +2100,7 @@ if (to_file) { if ((fp = fopen(fname, "w")) == NULL) { char errstr[LINE_LENGTH]; - sprintf(errstr, _("Cannot open file '%s'"), fname); + snprintf(errstr, sizeof(errstr), _("Cannot open file '%s'"), fname); print_warning(errstr); return; } @@ -2184,7 +2184,7 @@ if (to_file) { if ((fp = fopen(fname, "w")) == NULL) { char errstr[LINE_LENGTH]; - sprintf(errstr, _("Cannot open file '%s'"), fname); + snprintf(errstr, sizeof(errstr), _("Cannot open file '%s'"), fname); print_warning(errstr); return; } @@ -2638,9 +2638,9 @@ mvaddstr(WARNING_START, 0, line); - sprintf(line, "cfdisk %s", VERSION); + snprintf(line, COLS+1, "cfdisk %s", VERSION); mvaddstr(HEADER_START, (COLS-strlen(line))/2, line); - sprintf(line, _("Disk Drive: %s"), disk_device); + snprintf(line, COLS+1, _("Disk Drive: %s"), disk_device); mvaddstr(HEADER_START+2, (COLS-strlen(line))/2, line); { long long bytes = actual_size*(long long) SECTOR_SIZE; @@ -2654,7 +2654,7 @@ bytes, megabytes/K, (10*megabytes/K)%10); } mvaddstr(HEADER_START+3, (COLS-strlen(line))/2, line); - sprintf(line, _("Heads: %d Sectors per Track: %d Cylinders: %lld"), + snprintf(line, COLS+1, _("Heads: %d Sectors per Track: %d Cylinders: %lld"), heads, sectors, cylinders); mvaddstr(HEADER_START+4, (COLS-strlen(line))/2, line); --- fdisk/Makefile.orig 2004-09-06 13:28:58.000000000 -0700 +++ fdisk/Makefile 2006-09-02 21:34:32.000000000 -0700 @@ -6,6 +6,9 @@ include ../make_include include ../MCONFIG +# fdisk when built with ssp and omiting -fomit-frame-pointer causes fdisk/cfdisk/sfdisk to not see the device +CFLAGS += -fno-omit-frame-pointer + MAN8= SBIN= CFDISK=cfdisk --- fdisk/sfdisk.c.orig 2005-01-04 14:31:57.000000000 -0800 +++ fdisk/sfdisk.c 2006-09-02 21:34:32.000000000 -0700 @@ -172,7 +172,7 @@ * Note: we use 512-byte sectors here, irrespective of the hardware ss. */ #undef use_lseek -#if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (__s390x__) +#if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (__s390x__) || defined (__mips__) #define use_lseek #endif --- mount/Makefile.orig 2004-12-22 01:32:08.000000000 -0800 +++ mount/Makefile 2006-09-02 21:34:32.000000000 -0700 @@ -33,6 +33,8 @@ NFS_OBJS = nfsmount.o nfsmount_xdr.o nfsmount_clnt.o GEN_FILES = nfsmount.h nfsmount_xdr.c nfsmount_clnt.c +NFS_OBJS += nfs4mount.o +GEN_FILES += nfs4mount.c all: $(PROGS) install: $(PROGS) --- mount/mount.c.orig 2004-12-21 14:00:36.000000000 -0800 +++ mount/mount.c 2006-09-02 21:34:32.000000000 -0700 @@ -1476,8 +1476,6 @@ if ((p = strrchr(progname, '/')) != NULL) progname = p+1; - umask(022); - /* People report that a mount called from init without console writes error messages to /etc/mtab Let us try to avoid getting fd's 0,1,2 */ --- mount/umount.c.orig 2005-09-10 11:07:38.000000000 -0700 +++ mount/umount.c 2006-09-02 21:34:32.000000000 -0700 @@ -724,7 +724,7 @@ if (all) { /* nodev stuff: sysfs, usbfs, oprofilefs, ... */ if (types == NULL) - types = "noproc,nodevfs,nodevpts"; + types = "noproc,nodevfs,nodevpts,nosysfs"; result = umount_all (types, test_opts); } else if (argc < 1) { usage (stderr, 2); --- mount/fstab.c.orig 2004-12-21 11:09:24.000000000 -0800 +++ mount/fstab.c 2006-09-02 21:34:32.000000000 -0700 @@ -604,15 +604,32 @@ free(mc); } } else { - /* A remount */ - mc->m.mnt_opts = instead->mnt_opts; + /* A remount. */ + my_free(mc->m.mnt_opts); + /* Need to alloc memory, else we might + * run into issues if both we and the caller frees + * mnt_opts ... */ + mc->m.mnt_opts = xstrdup(instead->mnt_opts); } } else if (instead) { /* not found, add a new entry */ absent = xmalloc(sizeof(*absent)); - absent->m = *instead; + /* Cannot just set absent->m to instead, as we free absent + * below, and the caller might free instead */ + absent->m.mnt_fsname = xstrdup(instead->mnt_fsname); + absent->m.mnt_dir = xstrdup(instead->mnt_dir); + absent->m.mnt_type = xstrdup(instead->mnt_type); + absent->m.mnt_opts = xstrdup(instead->mnt_opts); + absent->m.mnt_freq = instead->mnt_freq; + absent->m.mnt_passno = instead->mnt_passno; + absent->nxt = mc0; - absent->prev = mc0->prev; + if (mc0->prev != NULL) { + absent->prev = mc0->prev; + mc0->prev->nxt = absent; + } else { + absent->prev = mc0; + } mc0->prev = absent; if (mc0->nxt == NULL) mc0->nxt = absent; @@ -624,6 +641,8 @@ int errsv = errno; error (_("cannot open %s (%s) - mtab not updated"), MOUNTED_TEMP, strerror (errsv)); + /* Do not leak memory */ + discard_mntentchn(mc0); goto leave; } --- mount/sundries.h.orig 2004-12-21 13:59:59.000000000 -0800 +++ mount/sundries.h 2006-09-02 21:34:32.000000000 -0700 @@ -37,6 +37,8 @@ #ifdef HAVE_NFS int nfsmount (const char *spec, const char *node, int *flags, char **orig_opts, char **opt_args, int *version, int running_bg); +int nfs4mount (const char *spec, const char *node, int *flags, + char **orig_opts, char **opt_args, int running_bg); #endif /* exit status - bits below are ORed */ --- mount/nfs4_mount.h.orig 2006-09-02 21:34:32.000000000 -0700 +++ mount/nfs4_mount.h 2006-09-02 21:34:32.000000000 -0700 @@ -0,0 +1,82 @@ +#ifndef _LINUX_NFS4_MOUNT_H +#define _LINUX_NFS4_MOUNT_H + +/* + * linux/include/linux/nfs4_mount.h + * + * Copyright (C) 2002 Trond Myklebust + * + * structure passed from user-space to kernel-space during an nfsv4 mount + */ + +/* + * WARNING! Do not delete or change the order of these fields. If + * a new field is required then add it to the end. The version field + * tracks which fields are present. This will ensure some measure of + * mount-to-kernel version compatibility. Some of these aren't used yet + * but here they are anyway. + */ +#define NFS4_MOUNT_VERSION 1 + +struct nfs_string { + unsigned int len; + const char* data; +}; + +struct nfs4_mount_data { + int version; /* 1 */ + int flags; /* 1 */ + int rsize; /* 1 */ + int wsize; /* 1 */ + int timeo; /* 1 */ + int retrans; /* 1 */ + int acregmin; /* 1 */ + int acregmax; /* 1 */ + int acdirmin; /* 1 */ + int acdirmax; /* 1 */ + + /* see the definition of 'struct clientaddr4' in RFC3010 */ + struct nfs_string client_addr; /* 1 */ + + /* Mount path */ + struct nfs_string mnt_path; /* 1 */ + + /* Server details */ + struct nfs_string hostname; /* 1 */ + /* Server IP address */ + unsigned int host_addrlen; /* 1 */ + struct sockaddr* host_addr; /* 1 */ + + /* Transport protocol to use */ + int proto; /* 1 */ + + /* Pseudo-flavours to use for authentication. See RFC2623 */ + int auth_flavourlen; /* 1 */ + int *auth_flavours; /* 1 */ +}; + +/* bits in the flags field */ +/* Note: the fields that correspond to existing NFSv2/v3 mount options + * should mirror the values from include/linux/nfs_mount.h + */ + +#define NFS4_MOUNT_SOFT 0x0001 /* 1 */ +#define NFS4_MOUNT_INTR 0x0002 /* 1 */ +#define NFS4_MOUNT_NOCTO 0x0010 /* 1 */ +#define NFS4_MOUNT_NOAC 0x0020 /* 1 */ +#define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */ +#define NFS4_MOUNT_FLAGMASK 0xFFFF + +/* pseudoflavors: */ + +#define RPC_AUTH_GSS_KRB5 390003 +#define RPC_AUTH_GSS_KRB5I 390004 +#define RPC_AUTH_GSS_KRB5P 390005 +#define RPC_AUTH_GSS_LKEY 390006 +#define RPC_AUTH_GSS_LKEYI 390007 +#define RPC_AUTH_GSS_LKEYP 390008 +#define RPC_AUTH_GSS_SPKM 390009 +#define RPC_AUTH_GSS_SPKMI 390010 +#define RPC_AUTH_GSS_SPKMP 390011 + +#endif --- mount/nfs4mount.c.orig 2006-09-02 21:34:32.000000000 -0700 +++ mount/nfs4mount.c 2006-09-02 21:34:32.000000000 -0700 @@ -0,0 +1,323 @@ +/* + * nfs4mount.c -- Linux NFS mount + * Copyright (C) 2002 Trond Myklebust + * + * 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. + * + * Note: this file based on the original nfsmount.c + */ + +#include "../defines.h" /* for HAVE_rpcsvc_nfs_prot_h and HAVE_inet_aton */ + +#include +#include +#undef __FD_CLR +#undef __FD_SET +#undef __FD_ISSET +#undef __FD_ZERO + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sundries.h" + +#include "mount_constants.h" +#include "nfs4_mount.h" + +#include "nls.h" + +#ifndef NFS_PORT +#define NFS_PORT 2049 +#endif + +static int parse_devname(char *hostdir, char **hostname, char **dirname) +{ + char *s; + + if (!(s = strchr(hostdir, ':'))) { + fprintf(stderr, + _("mount: " + "directory to mount not in host:dir format\n")); + return -1; + } + *hostname = hostdir; + *dirname = s + 1; + *s = '\0'; + /* Ignore all but first hostname in replicated mounts + until they can be fully supported. (mack@sgi.com) */ + if ((s = strchr(hostdir, ','))) { + *s = '\0'; + fprintf(stderr, + _("mount: warning: " + "multiple hostnames not supported\n")); + } + return 0; +} + +static int fill_ipv4_sockaddr(const char *hostname, struct sockaddr_in *addr) +{ + struct hostent *hp; + addr->sin_family = AF_INET; + + if (inet_aton(hostname, &addr->sin_addr)) + return 0; + if ((hp = gethostbyname(hostname)) == NULL) { + fprintf(stderr, _("mount: can't get address for %s\n"), + hostname); + return -1; + } + if (hp->h_length > sizeof(struct in_addr)) { + fprintf(stderr, + _("mount: got bad hp->h_length\n")); + hp->h_length = sizeof(struct in_addr); + } + memcpy(&addr->sin_addr, hp->h_addr, hp->h_length); + return 0; +} + +static int get_my_ipv4addr(char *ip_addr, int len) +{ + char myname[1024]; + struct sockaddr_in myaddr; + + if (gethostname(myname, sizeof(myname))) { + fprintf(stderr, _("mount: can't determine client address\n")); + return -1; + } + if (fill_ipv4_sockaddr(myname, &myaddr)) + return -1; + snprintf(ip_addr, len, "%s", inet_ntoa(myaddr.sin_addr)); + ip_addr[len-1] = '\0'; + return 0; +} + +int nfs4mount(const char *spec, const char *node, int *flags, + char **extra_opts, char **mount_opts, + int running_bg) +{ + static struct nfs4_mount_data data; + static char hostdir[1024]; + static char ip_addr[16] = "127.0.0.1"; + static struct sockaddr_in server_addr; + static int pseudoflavour = 0; + + char *hostname, *dirname, *old_opts; + char new_opts[1024]; + char *opt, *opteq; + char *s; + int val; + int port, bg, soft, intr; + int nocto, noac; + int retry; + int retval; + + retval = EX_FAIL; + if (strlen(spec) >= sizeof(hostdir)) { + fprintf(stderr, _("mount: " + "excessively long host:dir argument\n")); + goto fail; + } + strcpy(hostdir, spec); + if (parse_devname(hostdir, &hostname, &dirname)) + goto fail; + + if (fill_ipv4_sockaddr(hostname, &server_addr)) + goto fail; + if (get_my_ipv4addr(ip_addr, sizeof(ip_addr))) + goto fail; + + /* add IP address to mtab options for use when unmounting */ + s = inet_ntoa(server_addr.sin_addr); + old_opts = *extra_opts; + if (!old_opts) + old_opts = ""; + if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) { + fprintf(stderr, _("mount: " + "excessively long option argument\n")); + goto fail; + } + snprintf(new_opts, sizeof(new_opts), "%s%saddr=%s", + old_opts, *old_opts ? "," : "", s); + *extra_opts = xstrdup(new_opts); + + /* Set default options. + * rsize/wsize and timeo are left 0 in order to + * let the kernel decide. + */ + memset(&data, 0, sizeof(data)); + data.retrans = 3; + data.acregmin = 3; + data.acregmax = 60; + data.acdirmin = 30; + data.acdirmax = 60; + data.proto = IPPROTO_TCP; + + bg = 0; + soft = 0; + intr = 0; + nocto = 0; + noac = 0; + retry = 10000; /* 10000 minutes ~ 1 week */ + + /* + * NFSv4 specifies that the default port should be 2049 + */ + port = NFS_PORT; + + /* parse options */ + + for (opt = strtok(old_opts, ","); opt; opt = strtok(NULL, ",")) { + if ((opteq = strchr(opt, '='))) { + val = atoi(opteq + 1); + *opteq = '\0'; + if (!strcmp(opt, "rsize")) + data.rsize = val; + else if (!strcmp(opt, "wsize")) + data.wsize = val; + else if (!strcmp(opt, "timeo")) + data.timeo = val; + else if (!strcmp(opt, "retrans")) + data.retrans = val; + else if (!strcmp(opt, "acregmin")) + data.acregmin = val; + else if (!strcmp(opt, "acregmax")) + data.acregmax = val; + else if (!strcmp(opt, "acdirmin")) + data.acdirmin = val; + else if (!strcmp(opt, "acdirmax")) + data.acdirmax = val; + else if (!strcmp(opt, "actimeo")) { + data.acregmin = val; + data.acregmax = val; + data.acdirmin = val; + data.acdirmax = val; + } + else if (!strcmp(opt, "retry")) + retry = val; + else if (!strcmp(opt, "port")) + port = val; + else if (!strcmp(opt, "proto")) { + if (!strncmp(opteq+1, "tcp", 3)) + data.proto = IPPROTO_TCP; + else if (!strncmp(opteq+1, "udp", 3)) + data.proto = IPPROTO_UDP; + else + printf(_("Warning: Unrecognized proto= option.\n")); + } else if (!strcmp(opt, "clientaddr")) { + if (strlen(opteq+1) >= sizeof(ip_addr)) + printf(_("Invalid client address %s"), + opteq+1); + strncpy(ip_addr,opteq+1, sizeof(ip_addr)); + ip_addr[sizeof(ip_addr)-1] = '\0'; + } else if (!strcmp(opt, "sec")) { + if (!strncmp(opteq+1, "krb5i",5)) + pseudoflavour = 390004; + else if (!strncmp(opteq+1, "krb5p",5)) + pseudoflavour = 390005; + else if (!strncmp(opteq+1, "krb5",4)) + pseudoflavour = 390003; + else { + printf(_("unknown security type %s\n"), + opteq+1); + goto fail; + } + } else if (!strcmp(opt, "addr")) { + /* ignore */; + } else { + printf(_("unknown nfs mount parameter: " + "%s=%d\n"), opt, val); + goto fail; + } + } else { + val = 1; + if (!strncmp(opt, "no", 2)) { + val = 0; + opt += 2; + } + if (!strcmp(opt, "bg")) + bg = val; + else if (!strcmp(opt, "fg")) + bg = !val; + else if (!strcmp(opt, "soft")) + soft = val; + else if (!strcmp(opt, "hard")) + soft = !val; + else if (!strcmp(opt, "intr")) + intr = val; + else if (!strcmp(opt, "cto")) + nocto = !val; + else if (!strcmp(opt, "ac")) + noac = !val; + else { + if (!sloppy) { + printf(_("unknown nfs mount option: " + "%s%s\n"), val ? "" : "no", opt); + goto fail; + } + } + } + } + + data.flags = (soft ? NFS4_MOUNT_SOFT : 0) + | (intr ? NFS4_MOUNT_INTR : 0) + | (nocto ? NFS4_MOUNT_NOCTO : 0) + | (noac ? NFS4_MOUNT_NOAC : 0); + + if (pseudoflavour != 0) { + data.auth_flavourlen = 1; + data.auth_flavours = &pseudoflavour; + } + + data.client_addr.data = ip_addr; + data.client_addr.len = strlen(ip_addr); + + data.mnt_path.data = dirname; + data.mnt_path.len = strlen(dirname); + + data.hostname.data = hostname; + data.hostname.len = strlen(hostname); + data.host_addr = (struct sockaddr *)&server_addr; + data.host_addrlen = sizeof(server_addr); + +#ifdef NFS_MOUNT_DEBUG + printf("rsize = %d, wsize = %d, timeo = %d, retrans = %d\n", + data.rsize, data.wsize, data.timeo, data.retrans); + printf("acreg (min, max) = (%d, %d), acdir (min, max) = (%d, %d)\n", + data.acregmin, data.acregmax, data.acdirmin, data.acdirmax); + printf("port = %d, bg = %d, retry = %d, flags = %.8x\n", + port, bg, retry, data.flags); + printf("soft = %d, intr = %d, nocto = %d, noac = %d\n", + (data.flags & NFS4_MOUNT_SOFT) != 0, + (data.flags & NFS4_MOUNT_INTR) != 0, + (data.flags & NFS4_MOUNT_NOCTO) != 0, + (data.flags & NFS4_MOUNT_NOAC) != 0); + printf("proto = %s\n", (data.proto == IPPROTO_TCP) ? "tcp" : "udp"); +#endif + + data.version = NFS4_MOUNT_VERSION; + + *mount_opts = (char *) &data; + /* clean up */ + return 0; + +fail: + return retval; +} --- mount/swapon.c.orig 2004-12-22 01:50:19.000000000 -0800 +++ mount/swapon.c 2006-09-02 21:34:32.000000000 -0700 @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -137,10 +138,27 @@ static int is_in_proc_swaps(const char *fname) { int i; + struct stat fstatbuf; for (i = 0; i < numSwaps; i++) if (swapFiles[i] && !strcmp(fname, swapFiles[i])) return 1; + + /* fallback: + * if the device in /etc/fstab is a symlink, the entry + * in /proc/swaps won't match because the kernel stores + * absolute pathnames. Here we compare dev_t's. + */ + if (!lstat(fname, &fstatbuf)) + if (S_ISLNK(fstatbuf.st_mode)) { + struct stat swapstatbuf; + stat(fname, &fstatbuf); + for (i = 0; i < numSwaps; i++) + if (swapFiles[i] && !stat(swapFiles[i], &swapstatbuf) && \ + swapstatbuf.st_rdev == fstatbuf.st_rdev) + return 1; + } + return 0; } --- login-utils/Makefile.orig 2006-09-02 21:38:43.000000000 -0700 +++ login-utils/Makefile 2006-09-02 21:39:29.000000000 -0700 @@ -219,7 +219,7 @@ $(INSTALLDIR) $(MAN1DIR) $(INSTALLMAN) $(MAN1.MISC) $(MAN1DIR) ifeq "$(USE_TTY_GROUP)" "yes" - chgrp tty $(USRBINDIR)/wall + #chgrp tty $(USRBINDIR)/wall chmod g+s $(USRBINDIR)/wall endif --- misc-utils/cal.c.orig 2004-12-05 11:20:36.000000000 -0800 +++ misc-utils/cal.c 2006-09-02 21:34:32.000000000 -0700 @@ -89,7 +89,8 @@ static char * my_tgetstr(char *s, char *ss) { - return tigetstr(ss); + char *ret = tigetstr(ss); + return (ret == NULL ? "" : ret); } #elif defined(HAVE_termcap) @@ -112,7 +113,8 @@ static char * my_tgetstr(char *s, char *ss) { - return tgetstr(s, &strbuf); + char *ret = tgetstr(s, &strbuf); + return (ret == NULL ? "" : ret); } #endif --- misc-utils/Makefile.orig 2006-09-02 21:38:55.000000000 -0700 +++ misc-utils/Makefile 2006-09-02 21:39:58.000000000 -0700 @@ -113,7 +113,7 @@ $(INSTALLMAN) $(MAN1) $(MAN1DIR) ifeq "$(HAVE_WRITE)" "no" ifeq "$(USE_TTY_GROUP)" "yes" - chgrp tty $(USRBINDIR)/write + #chgrp tty $(USRBINDIR)/write chmod g+s $(USRBINDIR)/write endif endif --- po/fr.po.orig 2005-01-04 14:42:16.000000000 -0800 +++ po/fr.po 2006-09-02 21:34:32.000000000 -0700 @@ -8356,7 +8356,7 @@ #: mount/mount.c:483 #, c-format msgid "%s looks like swapspace - not mounted" -msgstr "%s ressemble ŕ un esapce de swap - n'a pas été monté" +msgstr "%s ressemble ŕ un espace de swap - n'a pas été monté" #: mount/mount.c:570 msgid "mount failed" --- partx/partx.c.orig 2004-08-23 13:13:27.000000000 -0700 +++ partx/partx.c 2006-09-02 21:34:32.000000000 -0700 @@ -333,7 +333,7 @@ /* * sseek: seek to specified sector */ -#if !defined (__alpha__) && !defined (__ia64__) && !defined (__s390x__) && !defined(__x86_64__) +#if !defined (__alpha__) && !defined (__ia64__) && !defined (__s390x__) && !defined(__x86_64__) && !defined(__mips__) #define NEED__llseek #endif --- MCONFIG.orig 2004-12-12 15:15:48.000000000 -0800 +++ MCONFIG 2006-09-02 21:34:32.000000000 -0700 @@ -59,7 +59,7 @@ # not be built or installed from the login-utils subdirectory. (The # shutdown and init from the SysVinit package do not depend on the last, # mesg, and wall from that package.) -HAVE_SYSVINIT_UTILS=yes +HAVE_SYSVINIT_UTILS=no # If HAVE_WRITE is set to "yes", then write will not be built or # installed from the misc-utils subdirectory. @@ -82,7 +82,7 @@ # If HAVE_KILL is set to "yes", then kill will not be built or # installed from the misc-utils subdirectory. # (There is also a kill in the procps package.) -HAVE_KILL=no +HAVE_KILL=yes # If ALLOW_VCS_USE is set to "yes", then login will chown /dev/vcsN # to the current user, allowing her to make a screendump and do other @@ -102,7 +102,7 @@ # If HAVE_SLN is set to "yes", then sln won't be installed # (but the man page sln.8 will be installed anyway). # sln also comes with libc and glibc. -HAVE_SLN=no +HAVE_SLN=yes # If HAVE_FDUTILS is set to "yes", then setfdprm won't be installed. HAVE_FDUTILS=no @@ -220,7 +220,7 @@ INSTALLBIN= $(INSTALL) -m $(BINMODE) INSTALLMAN= $(INSTALL) -m $(MANMODE) INSTALLDAT= $(INSTALL) -m $(DATMODE) -INSTALLSUID= $(INSTALL) -m $(SUIDMODE) -o root +INSTALLSUID= $(INSTALL) -m $(SUIDMODE) ifeq "$(DISABLE_NLS)" "yes" NLSFLAGS = -DDISABLE_NLS