summaryrefslogtreecommitdiff
path: root/nss/automount.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2006-11-17 22:55:51 +0000
committerArthur de Jong <arthur@arthurdejong.org>2006-11-17 22:55:51 +0000
commite2e2a4e5eb7ed84e66f7f027fdb01cffeaf9b9f1 (patch)
treebf2b74e68ea640ee663503b97202c8b7f2fa0164 /nss/automount.c
parentac028b7925b99391167ad96f288fe46c05c961c1 (diff)
do some refactoring in the generated code and add some documentation on generated code in comments in common.h
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/libnss_ldapd@96 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nss/automount.c')
-rw-r--r--nss/automount.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/nss/automount.c b/nss/automount.c
index d160e11..1297330 100644
--- a/nss/automount.c
+++ b/nss/automount.c
@@ -45,6 +45,18 @@ struct automount_context
int32_t magic; /* for sanity checks */
};
+static enum nss_status read_automount(
+ FILE *fp,const char **canon_key,const char **value,
+ char *buffer,size_t buflen,int *errnop)
+{
+ int32_t tmpint32;
+ size_t bufptr=0;
+ /* auto-genereted read code */
+ LDF_AUTOMOUNT;
+ /* we're done */
+ return NSS_STATUS_SUCCESS;
+}
+
/* this function initiates a structure for doing queries
using getautomountbyname() and getautomountent() */
enum nss_status _nss_ldap_setautomntent(
@@ -78,8 +90,8 @@ enum nss_status _nss_ldap_getautomntbyname_r(
{
struct automount_context *context;
FILE *fp;
- size_t bufptr=0;
int32_t tmpint32;
+ enum nss_status retv;
/* check context */
context=(struct automount_context *)private;
if ((context==NULL)||(context->magic!=AUTOMOUNT_CONTEXT_MAGIC))
@@ -94,43 +106,47 @@ enum nss_status _nss_ldap_getautomntbyname_r(
READ_RESPONSEHEADER(fp,NSLCD_ACTION_AUTOMOUNT_BYNAME);
/* read response */
READ_RESPONSE_CODE(fp);
- LDF_AUTOMOUNT;
+ retv=read_automount(fp,canon_key,value,buffer,buflen,errnop);
+ if (retv!=NSS_STATUS_SUCCESS)
+ return retv;
/* close socket and we're done */
fclose(fp);
return NSS_STATUS_SUCCESS;
}
-#define fp (context->fp)
-
enum nss_status _nss_ldap_getautomntent_r(
void *private,const char **canon_key,const char **value,
char *buffer,size_t buflen,int *errnop)
{
struct automount_context *context;
int32_t tmpint32;
- size_t bufptr=0;
+ enum nss_status retv;
/* check context */
context=(struct automount_context *)private;
if ((context==NULL)||(context->magic!=AUTOMOUNT_CONTEXT_MAGIC))
return NSS_STATUS_UNAVAIL;
/* if we don't have a file descriptor, begin a request now */
- if (fp==NULL)
+ if (context->fp==NULL)
{
/* open a new stream and write the request */
- OPEN_SOCK(fp);
- WRITE_REQUEST(fp,NSLCD_ACTION_AUTOMOUNT_ALL);
- WRITE_FLUSH(fp);
+ OPEN_SOCK(context->fp);
+ WRITE_REQUEST(context->fp,NSLCD_ACTION_AUTOMOUNT_ALL);
+ WRITE_FLUSH(context->fp);
/* read response header */
- READ_RESPONSEHEADER(fp,NSLCD_ACTION_AUTOMOUNT_ALL);
+ READ_RESPONSEHEADER(context->fp,NSLCD_ACTION_AUTOMOUNT_ALL);
}
/* read a response */
- READ_RESPONSE_CODE(fp);
- LDF_AUTOMOUNT;
+ READ_RESPONSE_CODE(context->fp);
+ retv=read_automount(context->fp,canon_key,value,buffer,buflen,errnop);
+ if (retv!=NSS_STATUS_SUCCESS)
+ {
+ /* remove reference to fp from context */
+ context->fp=NULL;
+ return retv;
+ }
return NSS_STATUS_SUCCESS;
}
-#undef fp
-
enum nss_status _nss_ldap_endautomntent(void **private)
{
struct automount_context *context;