[76] in arla-drinkers
Re: appl/arlalib.c's arlalib_get_cred() problems
daemon@ATHENA.MIT.EDU (Assar Westerlund)
Thu Jul 2 10:44:23 1998
From arla-drinkers-request@sundance.stacken.kth.se Thu Jul 02 14:44:22 1998
Return-Path: <arla-drinkers-request@sundance.stacken.kth.se>
Delivered-To: arla-drinkers-mtg@bloom-picayune.mit.edu
Received: (qmail 20733 invoked from network); 2 Jul 1998 14:44:21 -0000
Received: from unknown (HELO sundance.stacken.kth.se) (130.237.234.41)
by bloom-picayune.mit.edu with SMTP; 2 Jul 1998 14:44:21 -0000
Received: from assaris.sics.se (assaris.sics.se [193.10.66.108])
by sundance.stacken.kth.se (8.8.8/8.8.8) with ESMTP id QAA23796
for <arla-drinkers@stacken.kth.se>; Thu, 2 Jul 1998 16:38:58 +0200 (MET DST)
Received: (from assar@localhost) by assaris.sics.se (8.8.5/8.7.3) id QAA16439; Thu, 2 Jul 1998 16:40:03 +0200 (MET DST)
To: John Hawkinson <jhawk@bbnplanet.com>
Cc: arla-drinkers@stacken.kth.se
Subject: Re: appl/arlalib.c's arlalib_get_cred() problems
References: <199807020623.CAA04785@all-purpose-gunk.near.net>
Mime-Version: 1.0 (generated by tm-edit 7.68)
Content-Type: text/plain; charset=US-ASCII
From: Assar Westerlund <assar@sics.se>
Date: 02 Jul 1998 16:40:02 +0200
In-Reply-To: John Hawkinson's message of "Thu, 2 Jul 1998 02:23:08 -0400 (EDT)"
Message-ID: <5ld8bofha5.fsf@assaris.sics.se>
Lines: 81
X-Mailer: Gnus v5.5/Emacs 19.34
John Hawkinson <jhawk@bbnplanet.com> writes:
> Can't there be a better way? Like looking it up in /etc/name_to_sysnum
> dynamically? Sure, this is less efficient than hardcoding it, but
> isn't it "the right solution"?
Could you try the following patch?
/assar
Index: lib/kafs/afssys.c
===================================================================
RCS file: /afs/pdc.kth.se/src/packages/kth-krb/SourceRepository/lib/kafs/afssys.c,v
retrieving revision 1.59
diff -u -w -u -w -r1.59 afssys.c
--- afssys.c 1998/06/30 15:25:09 1.59
+++ afssys.c 1998/07/02 14:37:50
@@ -90,6 +90,40 @@
}
#endif /* _AIX */
+/*
+ * This probably only works under Solaris and could get confused if
+ * there's a /etc/name_to_sysnum file.
+ */
+
+#define _PATH_ETC_NAME_TO_SYSNUM "/etc/name_to_sysnum"
+
+static int
+map_syscall_name_to_number (const char *str, int *res)
+{
+ FILE *f;
+ char buf[256];
+ size_t str_len = strlen (str);
+
+ f = fopen (_PATH_ETC_NAME_TO_SYSNUM, "r");
+ if (f == NULL)
+ return -1;
+ while (fgets (buf, sizeof(buf), f) != NULL) {
+ if (strncmp (str, buf, str_len) == 0) {
+ char *begptr = buf + str_len;
+ char *endptr;
+ long val = strtol (begptr, &endptr, 0);
+
+ if (val != 0 && endptr != begptr) {
+ fclose (f);
+ *res = val;
+ return 0;
+ }
+ }
+ }
+ fclose (f);
+ return -1;
+}
+
#define NO_ENTRY_POINT 0
#define SINGLE_ENTRY_POINT 1
#define MULTIPLE_ENTRY_POINT 2
@@ -252,7 +286,8 @@
char *env = getenv ("AFS_SYSCALL");
/*
- * Already checked presence of AFS syscalls? */
+ * Already checked presence of AFS syscalls?
+ */
if (afs_entry_point != UNKNOWN_ENTRY_POINT)
return afs_entry_point != NO_ENTRY_POINT;
@@ -273,9 +308,13 @@
{
int tmp;
- if (env != NULL && sscanf (env, "%d", &tmp) == 1)
+ if (env != NULL) {
+ if (sscanf (env, "%d", &tmp) == 1
+ || map_syscall_name_to_number (env, &tmp) == 0) {
if (try_one (tmp) == 0)
goto done;
+ }
+ }
}
#endif /* AFS_SYSCALL || AFS_SYSCALL2 || AFS_SYSCALL3 */