Implement more nss stuff
authorDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Sun, 21 Sep 2008 10:14:31 +0000 (10:14 +0000)
committerDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Sun, 21 Sep 2008 10:14:31 +0000 (10:14 +0000)
16 files changed:
nss/databases.def
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Makefile
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/audit_user-lookup.c [deleted file]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/automount-lookup.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bootparams-lookup.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/netmasks-lookup.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_common.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_endent.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_getent.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_misc.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_search.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_setent.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_sunP.h [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/printers-lookup.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/project-lookup.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr-lookup.c [deleted file]

index a440a59..68b0ac0 100644 (file)
 
 DEFINE_DATABASE (aliases)
 #ifdef __OpenSolaris_kernel__
-DEFINE_DATABASE (audit_user)
 DEFINE_DATABASE (auth_attr)
+DEFINE_DATABASE (automount)
+DEFINE_DATABASE (bootparams)
 #endif
 DEFINE_DATABASE (ethers)
 DEFINE_DATABASE (group)
 DEFINE_DATABASE (hosts)
 DEFINE_DATABASE (netgroup)
+#ifdef __OpenSolaris_kernel__
+DEFINE_DATABASE (netmasks)
+#endif
 DEFINE_DATABASE (networks)
 DEFINE_DATABASE (passwd)
 #ifdef __OpenSolaris_kernel__
+DEFINE_DATABASE (printers)
 DEFINE_DATABASE (prof_attr)
+DEFINE_DATABASE (project)
 #endif
 DEFINE_DATABASE (protocols)
 DEFINE_DATABASE (publickey)
 DEFINE_DATABASE (rpc)
 DEFINE_DATABASE (services)
 DEFINE_DATABASE (shadow)
-#ifdef __OpenSolaris_kernel__
-DEFINE_DATABASE (user_attr)
-#endif
 
 /*
    Local Variables:
index 60e1894..a6896d8 100644 (file)
@@ -35,7 +35,8 @@ sysdep_routines +=  gethrtime mount umount umount2 systeminfo resolvepath \
     privP modctl acl facl lltostr ulltostr deflt _getauthnam _getauthattr \
     _getprofnam _getprofattr _getusernam _getuserattr _getauuserent \
     _getauusernam vfsent fdwalk closefrom ipsecalg gethostent sigsendset \
-    sigsend stack_getbounds thr_sighndlrinfo sun_compat mkdev
+    sigsend stack_getbounds thr_sighndlrinfo sun_compat mkdev nss_getent \
+    nss_setent nss_endent nss_misc
 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 \
@@ -107,7 +108,7 @@ libnsl-routines += nsl_misc
 endif
 
 ifeq ($(subdir),nss)
-databases += audit_user auth_attr prof_attr user_attr
+databases += auth_attr automount bootparams netmasks printers prof_attr project
 endif
 
 ifeq ($(subdir),nptl)
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/audit_user-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/audit_user-lookup.c
deleted file mode 100644 (file)
index 3e3a05a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* 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 audit_user
-#define DEFAULT_CONFIG "files nis"
-
-#include "XXX-lookup.c"
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/automount-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/automount-lookup.c
new file mode 100644 (file)
index 0000000..7fb809f
--- /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 automount
+#define DEFAULT_CONFIG "files nis"
+
+#include "XXX-lookup.c"
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bootparams-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bootparams-lookup.c
new file mode 100644 (file)
index 0000000..8525498
--- /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 bootparams
+#define DEFAULT_CONFIG "nis [NOTFOUND=return] files"
+
+#include "XXX-lookup.c"
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/netmasks-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/netmasks-lookup.c
new file mode 100644 (file)
index 0000000..26a59f8
--- /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 netmasks
+#define DEFAULT_CONFIG "nis [NOTFOUND=return] files"
+
+#include "XXX-lookup.c"
index 02a2877..302ea1b 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <sys/types.h>
 #include <stdint.h>
-#include <synch.h> /* mutex_t */
+#include <bits/libc-lock.h>
 
 typedef enum
   {
@@ -112,7 +112,7 @@ struct nss_getent_context;
 typedef struct nss_db_root
   {
        struct nss_db_state *s;
-       mutex_t lock;
+       __libc_lock_define (, lock);
   } nss_db_root_t;
 
 #define NSS_DB_ROOT_INIT               { 0, DEFAULTMUTEX }
@@ -121,7 +121,7 @@ typedef struct nss_db_root
 typedef struct
   {
        struct nss_getent_context *ctx;
-       mutex_t lock;
+       __libc_lock_define (, lock);
   } nss_getent_t;
 
 #define NSS_GETENT_INIT                        { 0, DEFAULTMUTEX }
@@ -140,7 +140,7 @@ typedef struct nss_config
   {
        char *name;
        nss_config_op_t cop;
-       mutex_t *lock;
+       void *lock;
        void *buffer;
        size_t length;
   } nss_config_t;
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_endent.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_endent.c
new file mode 100644 (file)
index 0000000..1dc69ab
--- /dev/null
@@ -0,0 +1,47 @@
+/* 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 <nss_sunP.h>
+#include <string.h>
+#include <bits/libc-lock.h>
+
+void nss_endent (nss_db_root_t *rootp, nss_db_initf_t initf,
+      nss_getent_t *contextpp)
+{
+  if (contextpp->ctx == NULL)
+    return;
+
+  __libc_lock_lock (contextpp->lock);
+
+  struct nss_getent_context *ctx = contextpp->ctx;
+  __nss_endent (ctx->endfuncname, ctx->dblookup, &ctx->nip, &ctx->startp,
+      &ctx->last_nip, 0);
+
+  /* Free context.  */
+  free (contextpp->ctx);
+  contextpp->ctx = NULL;
+
+  __libc_lock_unlock (contextpp->lock);
+}
+
+
+void nss_delete (nss_db_root_t *rootp)
+{
+  /* We do nothing here by design.  */
+}
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_getent.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_getent.c
new file mode 100644 (file)
index 0000000..bb89c68
--- /dev/null
@@ -0,0 +1,56 @@
+/* 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 <nss_sunP.h>
+#include <string.h>
+#include <bits/libc-lock.h>
+
+nss_status_t nss_getent (nss_db_root_t *rootp, nss_db_initf_t initf,
+      nss_getent_t *contextpp, void *args)
+{
+  __libc_lock_lock (contextpp->lock);
+
+  /* The first time we are called the context is NULL.  */
+  if (contextpp->ctx == NULL)
+    {
+      /* Call setent to initialize the context.  */
+      nss_setent (rootp, initf, contextpp);
+      if (contextpp->ctx == NULL)
+        {
+          __libc_lock_unlock (contextpp->lock);
+          return NSS_UNAVAIL;
+        }
+    }
+
+  nss_XbyY_args_t *nssargs = (nss_XbyY_args_t *)args;
+  struct nss_getent_context *ctx = contextpp->ctx;
+
+  // TODO: Store nssargs->str2ent in a global table and use it for parsing.
+
+  int res = __nss_getent_r (ctx->getfuncname, ctx->setfuncname,
+      ctx->dblookup, &ctx->nip, &ctx->startp, &ctx->last_nip,
+      &ctx->stayopen_tmp, 0, nssargs->buf.result, nssargs->buf.buffer,
+      nssargs->buf.buflen, &nssargs->returnval, &nssargs->h_errno);
+
+  __libc_lock_unlock (contextpp->lock);
+
+  if (res != 0)
+    __set_errno (res);
+  return RESULT_TO_STATUS (res);
+}
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_misc.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_misc.c
new file mode 100644 (file)
index 0000000..cce7eb8
--- /dev/null
@@ -0,0 +1,103 @@
+/* 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 <nss_sunP.h>
+#include <string.h>
+
+int __nss_dbname_to_dbid (const char *dbname)
+{
+  if (strcmp (dbname, "auth_attr") == 0)
+    return NSS_DBID_AUTH_ATTR;
+  if (strcmp (dbname, "automount") == 0)
+    return NSS_DBID_AUTOMOUNT;
+  if (strcmp (dbname, "bootparams") == 0)
+    return NSS_DBID_BOOTPARAMS;
+  if (strcmp (dbname, "netmasks") == 0)
+    return NSS_DBID_NETMASKS;
+  if (strcmp (dbname, "printers") == 0)
+    return NSS_DBID_PRINTERS;
+  if (strcmp (dbname, "prof_attr") == 0)
+    return NSS_DBID_PROF_ATTR;
+  if (strcmp (dbname, "project") == 0)
+    return NSS_DBID_PROJECT;
+
+  return -1;
+}
+
+
+const char * __nss_dbop_to_name (int dbid, int search_fnum)
+{
+  // TODO
+  switch (dbid)
+    {
+    case NSS_DBID_AUTH_ATTR:
+    case NSS_DBID_AUTOMOUNT:
+    case NSS_DBID_BOOTPARAMS:
+    case NSS_DBID_NETMASKS:
+    case NSS_DBID_PRINTERS:
+    case NSS_DBID_PROF_ATTR:
+    case NSS_DBID_PROJECT:
+      break;
+    }
+
+  return NULL;
+}
+
+
+db_lookup_function __nss_dbname_to_lookup (const char *dbname)
+{
+  extern int internal_function __nss_auth_attr_lookup (service_user **,
+      const char *, void **);
+  extern int internal_function __nss_automount_lookup (service_user **,
+      const char *, void **);
+  extern int internal_function __nss_bootparams_lookup (service_user **,
+      const char *, void **);
+  extern int internal_function __nss_netmasks_lookup (service_user **,
+      const char *, void **);
+  extern int internal_function __nss_printers_lookup (service_user **,
+      const char *, void **);
+  extern int internal_function __nss_prof_attr_lookup (service_user **,
+      const char *, void **);
+  extern int internal_function __nss_project_lookup (service_user **,
+      const char *, void **);
+
+  int dbid = __nss_dbname_to_dbid (dbname);
+  if (dbid == -1)
+    return NULL;
+
+  switch (dbid)
+    {
+    case NSS_DBID_AUTH_ATTR:
+      return __nss_auth_attr_lookup;
+    case NSS_DBID_AUTOMOUNT:
+      return __nss_automount_lookup;
+    case NSS_DBID_BOOTPARAMS:
+      return __nss_bootparams_lookup;
+    case NSS_DBID_NETMASKS:
+      return __nss_netmasks_lookup;
+    case NSS_DBID_PRINTERS:
+      return __nss_printers_lookup;
+    case NSS_DBID_PROF_ATTR:
+      return __nss_prof_attr_lookup;
+    case NSS_DBID_PROJECT:
+      return __nss_project_lookup;
+    }
+
+  return NULL;
+}
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_search.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_search.c
new file mode 100644 (file)
index 0000000..401d9e1
--- /dev/null
@@ -0,0 +1,27 @@
+/* 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 <nss_sunP.h>
+#include <string.h>
+#include <bits/libc-lock.h>
+
+nss_status_t nss_search (nss_db_root_t *rootp, nss_db_initf_t initf,
+      int search_fnum, void *search_args)
+{
+}
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_setent.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_setent.c
new file mode 100644 (file)
index 0000000..21cf65e
--- /dev/null
@@ -0,0 +1,58 @@
+/* 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 <nss_sunP.h>
+#include <string.h>
+#include <bits/libc-lock.h>
+
+void nss_setent (nss_db_root_t *rootp, nss_db_initf_t initf,
+      nss_getent_t *contextpp)
+{
+  __libc_lock_lock (contextpp->lock);
+
+  /* If we've never called nss_setent then the context is NULL.  */
+  if (contextpp->ctx == NULL)
+    {
+      /* Allocate context.  */
+      contextpp->ctx = malloc (sizeof (struct nss_getent_context));
+      if (!contextpp->ctx)
+        {
+          __libc_lock_unlock (contextpp->lock);
+          return;
+        }
+      struct nss_getent_context *ctx = contextpp->ctx;
+      memset (ctx, 0, sizeof (*ctx));
+
+      /* Construct names.  */
+      nss_db_params_t conf;
+      initf (&conf);
+      sprintf (ctx->getfuncname, "get%sent", conf.name);
+      sprintf (ctx->setfuncname, "set%sent", conf.name);
+      sprintf (ctx->endfuncname, "end%sent", conf.name);
+
+      /* Get db lookup func.  */
+      ctx->dblookup = __nss_dbname_to_lookup (conf.name);
+    }
+
+  struct nss_getent_context *ctx = contextpp->ctx;
+  __nss_setent (ctx->setfuncname, ctx->dblookup, &ctx->nip, &ctx->startp,
+      &ctx->last_nip, ctx->stayopen, &ctx->stayopen_tmp, 0);
+
+  __libc_lock_unlock (contextpp->lock);
+}
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_sunP.h b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/nss_sunP.h
new file mode 100644 (file)
index 0000000..20359ae
--- /dev/null
@@ -0,0 +1,127 @@
+/* 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 _NSS_SUNP_H
+#define _NSS_SUNP_H
+
+#include <sys/types.h>
+#include <nss/nsswitch.h>
+#include "nss_common.h"
+
+typedef struct
+  {
+       void *result;
+       char *buffer;
+       int buflen;
+  } nss_XbyY_buf_t;
+
+typedef int (*nss_str2ent_t)(const char *, int, void *, char *, int);
+
+typedef union nss_XbyY_key
+  {
+       uid_t uid;
+       gid_t gid;
+       projid_t projid;
+       const char *name;
+       int number;
+       struct
+         {
+               int net;
+               int type;
+         } netaddr;
+       struct
+         {
+               const char *addr;
+               int len;
+        int type;
+         } hostaddr;
+       struct
+         {
+               union
+                 {
+                       const char *name;
+            int port;
+                 } serv;
+        const char *proto;
+         } serv;
+       void *ether;
+       struct
+         {
+               const char *name;
+               const char *keytype;
+         } pkey;
+       struct
+         {
+               const char *name;
+               int af_family;
+               int flags;
+         } ipnode;
+       void *attrp;
+} nss_XbyY_key_t;
+
+typedef int (*nss_key2str_t)(void *, size_t, nss_XbyY_key_t *, size_t *);
+
+typedef struct nss_XbyY_args
+  {
+       nss_XbyY_buf_t buf;
+       int stayopen;
+       nss_str2ent_t str2ent;
+       union nss_XbyY_key key;
+       void *returnval;
+       int erange;
+       int h_errno;
+       nss_status_t status;
+       nss_key2str_t key2str;
+       size_t returnlen;
+  } nss_XbyY_args_t;
+
+struct nss_getent_context
+  {
+    char getfuncname[30];
+    char setfuncname[30];
+    char endfuncname[30];
+    db_lookup_function dblookup;
+
+       service_user *nip;
+       service_user *last_nip;
+       service_user *startp;
+
+    int stayopen;
+    int stayopen_tmp;
+  };
+
+#define RESULT_TO_STATUS(res) \
+       ((res == 0) ? NSS_SUCCESS : (res == ENOENT) ? NSS_TRYAGAIN : NSS_ERROR)
+
+enum nss_dbid
+  {
+       NSS_DBID_AUTH_ATTR,
+       NSS_DBID_AUTOMOUNT,
+       NSS_DBID_BOOTPARAMS,
+       NSS_DBID_NETMASKS,
+       NSS_DBID_PRINTERS,
+       NSS_DBID_PROF_ATTR,
+       NSS_DBID_PROJECT
+  };
+
+extern int __nss_dbname_to_dbid (const char *dbname);
+extern const char * __nss_dbop_to_name (int dbid, int search_fnum);
+extern db_lookup_function __nss_dbname_to_lookup (const char * dbname);
+
+#endif /* _NSS_SUNP_H */
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/printers-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/printers-lookup.c
new file mode 100644 (file)
index 0000000..2e9dfdb
--- /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 printers
+#define DEFAULT_CONFIG "user files nis nisplus"
+
+#include "XXX-lookup.c"
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/project-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/project-lookup.c
new file mode 100644 (file)
index 0000000..0828c58
--- /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 project
+#define DEFAULT_CONFIG "files nis"
+
+#include "XXX-lookup.c"
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr-lookup.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/user_attr-lookup.c
deleted file mode 100644 (file)
index 066cc51..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* 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"