Implement user_auth
authorDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Wed, 17 Sep 2008 18:43:08 +0000 (18:43 +0000)
committerDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Wed, 17 Sep 2008 18:43:08 +0000 (18:43 +0000)
nss/databases.def
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Makefile
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/_getuserattr.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/_getusernam.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/auth_attr.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr-lookup.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr.h [new file with mode: 0644]

index 96dce6b..782c8b4 100644 (file)
@@ -39,6 +39,9 @@ DEFINE_DATABASE (publickey)
 DEFINE_DATABASE (rpc)
 DEFINE_DATABASE (services)
 DEFINE_DATABASE (shadow)
+#ifdef __OpenSolaris_kernel__
+DEFINE_DATABASE (user_attr)
+#endif
 
 /*
    Local Variables:
index a9540a6..e8d8359 100644 (file)
@@ -33,7 +33,7 @@ sysdep_routines +=  gethrtime mount umount umount2 systeminfo resolvepath \
     _so_send _so_sendmsg _so_sendto _so_setsockopt _so_shutdown _so_socket \
     _so_socketpair _sysconfig rctl atomic door getexecname is_system_labeled \
     privP mnttab modctl acl facl lltostr ulltostr defopen defread defcntl \
-    _getprofnam _getprofattr _getauthnam _getauthattr
+    _getauthnam _getauthattr _getprofnam _getprofattr _getusernam _getuserattr
 sysdep_routines += sys_fdsync sys_brk sys_fcntl sys_utssys sys_lwp_private \
     sys_uname sys_getloadavg sys_utimes sys_getpeerucred sys_ucred_get \
     sys_privsys sys_putmsg sys_putpmsg sys_meminfo sys_pset_getloadavg \
@@ -53,7 +53,7 @@ sysdep_headers += sys/feature_tests.h sys/mount.h sys/cred.h sys/ulimit.h \
     sys/ucred.h sys/port_impl.h sys/ttold.h sys/machtypes.h sys/dirent.h \
     sys/utime.h sys/vfstab sys/procfs.h
 sysdep_headers += ucred.h priv.h bits/regset.h door.h zone.h deflt.h \
-    prof_attr.h auth_attr.h rtld_db.h pcsample.h port.h atomic.h \
+    auth_attr.h prof_attr.h user_attr.h rtld_db.h pcsample.h port.h atomic.h \
     bits/machtypes.h
 headers := $(filter-out sys/sysinfo.h,$(headers))
 endif
@@ -111,7 +111,7 @@ libnsl-routines += nsl_misc
 endif
 
 ifeq ($(subdir),nss)
-databases += prof_attr auth_attr
+databases += auth_attr prof_attr user_attr
 endif
 
 ifeq ($(subdir),nptl)
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/_getuserattr.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/_getuserattr.c
new file mode 100644 (file)
index 0000000..c7ff98a
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+   The GNU C 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.1 of the License, or (at your option) any later version.
+
+   The GNU C 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 the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <user_attr.h>
+
+#define LOOKUP_TYPE    userstr_t
+#define SETFUNC_NAME   _setuserattr
+#define        GETFUNC_NAME    _getuserattr
+#define        ENDFUNC_NAME    _enduserattr
+#define DATABASE_NAME  user_attr
+#define BUFLEN         NSS_BUFLEN_PROFATTR
+
+#include "../nss/getXXent_r.c"
+
+userstr_t * _getuserattr (userstr_t *psbuf, char *buf, int buflen, int *errnop)
+{
+  userstr_t *psbufp;
+  int errval = _getuserattr_r (psbuf, buf, buflen, &psbufp);
+  if (errval && errnop)
+    *errnop = errval;
+
+  return errval ? NULL : psbuf;
+}
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/_getusernam.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/_getusernam.c
new file mode 100644 (file)
index 0000000..a269417
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+   The GNU C 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.1 of the License, or (at your option) any later version.
+
+   The GNU C 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 the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <user_attr.h>
+
+#define LOOKUP_TYPE    userstr_t
+#define FUNCTION_NAME  _getusernam
+#define DATABASE_NAME  user_attr
+#define ADD_PARAMS     const char *name
+#define ADD_VARIABLES  name
+#define BUFLEN         NSS_BUFLEN_PROFATTR
+
+#include <nss/getXXbyYY_r.c>
+
+userstr_t * _getusernam (const char *name, userstr_t *psbuf, char *buf,
+      int buflen, int *errnop)
+{
+  userstr_t *psbufp;
+  int errval = _getusernam_r (name, psbuf, buf, buflen, &psbufp);
+  if (errval && errnop)
+    *errnop = errval;
+
+  return errval ? NULL : psbuf;
+}
index cfe941c..e5b8cac 100644 (file)
@@ -53,11 +53,10 @@ __BEGIN_DECLS
 
 extern authattr_t *getauthnam (const char *);
 extern authattr_t *getauthattr (void);
-extern void getauthlist (const char *, char **, int *);
 extern void setauthattr (void);
 extern void endauthattr (void);
 extern void free_authattr (authattr_t *);
-extern void free_authlist (char **, int);
+extern int chkauthattr (const char *, const char *);
 
 __END_DECLS
 
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr-lookup.c
new file mode 100644 (file)
index 0000000..066cc51
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+   The GNU C 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.1 of the License, or (at your option) any later version.
+
+   The GNU C 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 the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#define DATABASE_NAME user_attr
+#define DEFAULT_CONFIG "files nis"
+
+#include "XXX-lookup.c"
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr.h b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr.h
new file mode 100644 (file)
index 0000000..3ea0aa8
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
+
+   The GNU C 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.1 of the License, or (at your option) any later version.
+
+   The GNU C 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 the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _USER_ATTR_H
+#define _USER_ATTR_H
+
+#include <features.h>
+#include <sys/types.h>
+#include <stdio.h>
+
+#define NSS_BUFLEN_USERATTR    1024
+
+typedef struct userstr_s
+  {
+       char *name;
+    char *qualifier;
+       char *res1;
+       char *res2;
+       char *attr;
+} userstr_t;
+
+typedef struct kva_s kva_t;
+
+typedef struct userattr_s
+  {
+       char *name;
+    char *qualifier;
+       char *res1;
+       char *res2;
+       kva_t *attr;
+ } userattr_t;
+
+__BEGIN_DECLS
+
+extern userattr_t *getusernam (const char *);
+extern userattr_t *getuseruid (uid_t);
+extern userattr_t *getuserattr (void);
+extern userattr_t *fgetuserattr (FILE *);
+extern void setuserattr (void);
+extern void enduserattr (void);
+extern void free_userattr (userattr_t *);
+
+__END_DECLS
+
+#endif /* _USER_ATTR_H */