aix-dynamic-auth-20040507
authorHartmut Reuter <reuter@rzg.mpg.de>
Sat, 8 May 2004 05:45:36 +0000 (05:45 +0000)
committerDerrick Brashear <shadow@dementia.org>
Sat, 8 May 2004 05:45:36 +0000 (05:45 +0000)
FIXES 4278

make dynamic auth work for aix 5

src/tsm41/aix41_auth.c

index 9b6e592..b9fa36e 100644 (file)
@@ -29,6 +29,8 @@ RCSID
 #include <afs/kauth.h>
 #include <afs/kautils.h>
 
+struct passwd *afs_getpwnam_int(char *, int);
+
 int
 afs_authenticate(char *userName, char *response, int *reenter, char **message)
 {
@@ -52,7 +54,12 @@ afs_authenticate(char *userName, char *response, int *reenter, char **message)
            return AUTH_FAILURE;
        }
     }
-    if ((pwd = getpwnam(userName)) == NULL) {
+#ifdef AFS_AIX51_ENV
+    if ((pwd = afs_getpwnam_int(userName, 1)) == NULL) 
+#else
+    if ((pwd = getpwnam(userName)) == NULL) 
+#endif
+      {
        *message = (char *)malloc(256);
        sprintf(*message, "getpwnam for user failed\n");
        return AUTH_FAILURE;
@@ -137,6 +144,12 @@ afs_getgrnam(char *name)
 struct passwd *
 afs_getpwnam(char *user)
 {
+    return (struct passwd *) afs_getpwnam_int(user, 0);
+}
+
+struct passwd *
+afs_getpwnam_int(char *user, int ignore)
+{
     static char name[64];
     static char passwd[64];
     static char gecos[256];
@@ -145,6 +158,12 @@ afs_getpwnam(char *user)
     static struct passwd pwd;
     struct passwd *p;
 
+    pwd.pw_uid = 4294967294;
+    pwd.pw_gid = 4294967294;
+    strcpy((char *)&shell, "/bin/false");
+    if (!user)
+       return &pwd;
+
     while ((p = getpwent()) != NULL) {
        if (!strcmp(p->pw_name, user)) {
            strncpy(&name, p->pw_name, sizeof(name));
@@ -163,6 +182,8 @@ afs_getpwnam(char *user)
        }
     }
     endpwent();
+    if (ignore && (p == NULL))
+       return NULL;
     return &pwd;
 }
 #else
@@ -173,19 +194,11 @@ afs_getpwnam(int id)
 }
 #endif
 
-#ifdef AFS_AIX52_ENV
-struct passwd *
-afs_getpwuid(uid_t uid)
-{
-    return pwd;
-}
-#else
 int
 afs_getpwuid(char *name)
 {
     return NULL;
 }
-#endif
 
 int
 afs_initialize(struct secmethod_table *meths)