From owner-wu-ftpd@wugate.wustl.edu Wed Mar 26 07:37 CST 1997 Received: from wugate.wustl.edu (wugate.wustl.edu [128.252.120.1]) by landfield.com (8.7.5/8.7.3) with ESMTP id HAA01655; Wed, 26 Mar 1997 07:37:53 -0600 (CST) Received: from host (wugate.wustl.edu [128.252.120.1]) by wugate.wustl.edu (8.8.5/8.8.5) with SMTP id HAA17089; Wed, 26 Mar 1997 07:28:56 -0600 (CST) Received: from bofh.co.telenet.pt (oberon.co.telenet.pt [193.219.97.18]) by wugate.wustl.edu (8.8.5/8.8.5) with ESMTP id HAA31151 for ; Wed, 26 Mar 1997 07:26:58 -0600 (CST) Received: from oberon.co.telenet.pt ([193.219.97.18]) by bofh.co.telenet.pt (Netscape Mail Server v1.1) with SMTP id AAA378; Wed, 26 Mar 1997 13:32:59 +0000 Message-Id: <33432400.784030356@mail.co.telenet.pt> Date: Wed, 26 Mar 1997 13:32:59 GMT Reply-To: wu-ftpd@wugate.wustl.edu Sender: owner-wu-ftpd@wugate.wustl.edu From: melo@co.telenet.pt (Pedro Melo) To: wu-ftpd@wugate.wustl.edu Cc: minerva@teleport.com Subject: Static-ls for fileutils 3-16 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Mailer: Forte Agent 1.0/32.390 X-Listprocessor-Version: 8.0 -- ListProcessor(tm) by CREN Content-Type: text/plain; charset=us-ascii Content-Length: 8010 Status: OR Hi! I have made a small procedure for compiling ls static on Solaris. Tested on Solaris 2.5.1 with gcc and fileutils-3.16 Basically I adapted the current procedure to the new fileutils (old one was for fileutils-3.13) and use the same static-ls.c from Emil. It might be good to put it online so I'm CC'ing this to Darci who maintains the HowTo for WuFtpd on Solaris Melo -------------- Ok, a small procedure to build a staitc ls. 1. get fileutils-3.16 from your favourite GNU mirror site. 2. Unpack 3. apply the patch (see below) 4. copy static-ls.c (see below) to the fileutils-3.16/src/ subdirectory. static-ls contains some the functions that Solaris does not provide statically. This file is the work of Emil Isberg and Brett Porter . Great work! 5. cd into fileutils-3.16 6. run configure 7. make 8. cd into src 9. test with truss ./ls -la 2> err err should not contain any references to any libs... file ls should report somethink like ELF 32-bit MSB executable SPARC Version 1, statically linked, not stripped 10. (Optional) strip ls You can now copy it into your bin directory. Files needed. ---------cut here: ls-static.patch------------ *** fileutils-3.16/src/Makefile.in Mon Jan 27 02:26:57 1997 --- fileutils-3.16-prep/src/Makefile.in Wed Mar 26 12:56:16 1997 *************** *** 74,79 **** --- 74,80 ---- cp_SOURCES = cp.c cp-aux.c cp-hash.c dir_SOURCES = ls.c ls-dir.c vdir_SOURCES = ls.c ls-vdir.c + static-ls_SOURCES = static-ls.c ls_SOURCES = ls.c ls-ls.c BUILT_SOURCES = dircolors.h *************** *** 155,164 **** vdir_LDADD = $(LDADD) vdir_DEPENDENCIES = ../lib/libfu.a vdir_LDFLAGS = ! ls_OBJECTS = ls.$o ls-ls.$o ls_LDADD = $(LDADD) ls_DEPENDENCIES = ../lib/libfu.a ! ls_LDFLAGS = mkdir_SOURCES = mkdir.c mkdir_OBJECTS = mkdir.$o mkdir_LDADD = $(LDADD) --- 156,166 ---- vdir_LDADD = $(LDADD) vdir_DEPENDENCIES = ../lib/libfu.a vdir_LDFLAGS = ! static-ls_OBJECTS = static-ls.$o ! ls_OBJECTS = ls.$o ls-ls.$o $(static-ls_OBJECTS) ls_LDADD = $(LDADD) ls_DEPENDENCIES = ../lib/libfu.a ! ls_LDFLAGS = -static mkdir_SOURCES = mkdir.c mkdir_OBJECTS = mkdir.$o mkdir_LDADD = $(LDADD) *************** *** 199,205 **** touch_LDADD = $(LDADD) touch_DEPENDENCIES = ../lib/libfu.a touch_LDFLAGS = ! CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) LINK = $(CC) $(LDFLAGS) -o $@ HEADERS = $(noinst_HEADERS) --- 201,207 ---- touch_LDADD = $(LDADD) touch_DEPENDENCIES = ../lib/libfu.a touch_LDFLAGS = ! CFLAGS = -static @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) LINK = $(CC) $(LDFLAGS) -o $@ HEADERS = $(noinst_HEADERS) ----------- cut here --------------------------- ----------- cut here: static-ls.c -------------- /* static-ls.c rec.1, by Emil Isberg */ /* static-ls.c rev.2, by Brett Porter */ /* static-ls.c rev.2.1, by Emil Isberg */ /* for gnufileutils .. under Solaris 2.5 */ /* To compile .. get the lates version of gnufileutil .. */ /* add this file */ #include #include #include #include #include #include #include #include #include #define FPASSWD "/etc/passwd" #define FGROUP "/etc/group" char *dlopen() { return 0;} int dlclose() { return 0;} char *dlsym() { return 0;} char *dlerror() { return "dynamic linking not loaded";} typedef struct { uid_t uid; char *user_name; } pw_entry; typedef struct { gid_t gid; char *group_name; } group_entry; static pw_entry *pw_array = NULL; static group_entry *group_array = NULL; static void fill_pw_array (void); static void fill_group_array (void); static void fill_pw_array (void) { int fd; int ok; static char *pw_buf; struct stat statbuf; char *cp; int n_entries; int n_read; int entry; fd = open (FPASSWD, O_RDONLY); if (fd < 0) { fprintf (stderr, "Error opening password file.\n"); return; } ok = fstat (fd, &statbuf); if (ok != 0) { fprintf (stderr, "Error stat-ing passwd file.\n"); close (fd); return; } pw_buf = malloc (statbuf.st_size + 1); if (pw_buf == NULL) { fprintf (stderr, "Error allocating memory.\n"); close (fd); return; } n_read = read (fd, pw_buf, (size_t) statbuf.st_size); if (n_read != statbuf.st_size) { perror (NULL); fprintf (stderr, "Error reading password file.\n"); free (pw_buf); close (fd); return; } pw_buf [statbuf.st_size] = '\0'; close (fd); n_entries = 0; for (cp = pw_buf; *cp != '\0'; cp++) { if (*cp == '\n') n_entries++; } pw_array = (pw_entry *) malloc ((n_entries + 1) * sizeof (pw_entry)); if (pw_array == NULL) { fprintf (stderr, "Error allocating memory.\n"); free (pw_buf); return; } pw_array [n_entries].uid = -1; cp = pw_buf; for (entry = 0; entry < n_entries; entry++) { pw_array [entry].user_name = cp; while (*cp != ':') cp++; *cp++ = '\0'; while (*cp != ':') cp++; cp++; pw_array [entry].uid = atoi (cp); while (*cp != '\n') cp++; cp++; } } static void fill_group_array (void) { int fd; int ok; static char *group_buf; struct stat statbuf; char *cp; int n_entries; int n_read; int entry; fd = open (FGROUP, O_RDONLY); if (fd < 0) { fprintf (stderr, "Error opening group file.\n"); return; } ok = fstat (fd, &statbuf); if (ok != 0) { fprintf (stderr, "Error stat-ing group file.\n"); close (fd); return; } group_buf = malloc (statbuf.st_size + 1); if (group_buf == NULL) { fprintf (stderr, "Error allocating memory.\n"); close (fd); return; } n_read = read (fd, group_buf, (size_t) statbuf.st_size); if (n_read != statbuf.st_size) { perror (NULL); fprintf (stderr, "Error reading group file.\n"); free (group_buf); close (fd); return; } group_buf [statbuf.st_size] = '\0'; close (fd); n_entries = 0; for (cp = group_buf; *cp != '\0'; cp++) { if (*cp == '\n') n_entries++; } group_array = (group_entry *) malloc ((n_entries + 1) * sizeof (group_entry)); if (group_array == NULL) { fprintf (stderr, "Error allocating memory.\n"); free (group_buf); return; } group_array [n_entries].gid = -1; cp = group_buf; for (entry = 0; entry < n_entries; entry++) { group_array [entry].group_name = cp; while (*cp != ':') cp++; *cp++ = '\0'; while (*cp != ':') cp++; cp++; group_array [entry].gid = atoi (cp); while (*cp != '\n') cp++; cp++; } } char * getuser(uid_t uid) { pw_entry *p_pw; static char uid_str [11]; if (pw_array == NULL) fill_pw_array (); if (pw_array == NULL) { sprintf (uid_str, "%lu", uid); return uid_str; } for (p_pw = pw_array; p_pw->uid != -1; p_pw++) { if (p_pw->uid == uid) return p_pw->user_name; } sprintf (uid_str, "%lu", uid); return uid_str; } char * getgroup(gid_t gid) { group_entry *p_group; static char gid_str [11]; if (group_array == NULL) fill_group_array (); if (group_array == NULL) { sprintf (gid_str, "%lu", gid); return gid_str; } for (p_group = group_array; p_group->gid != -1; p_group++) { if (p_group->gid == gid) return p_group->group_name; } sprintf (gid_str, "%lu", gid); return gid_str; } ------------------ cut here -------------------- -- ************** Pedro Melo (melo@co.telenet.pt) BOFH ****************** * TELENET, Servicos de Telecomunicacoes, SA - Tel +351 1 3139190 * * finger melo@finger.co.telenet.pt or search key servers for PGP key * * It's management's job to support the geniuses, * * not to tell them what to do * **********************************************************************