summaryrefslogtreecommitdiff
path: root/nslcd/shadow.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2007-10-28 10:57:37 +0000
committerArthur de Jong <arthur@arthurdejong.org>2007-10-28 10:57:37 +0000
commitd0bee6fe83adeeac591d2b8971d81b94963f2ded (patch)
tree3315dd27acf657885db5b287fd919549e795b4c9 /nslcd/shadow.c
parent1a60134c376f0023ab0a5283391e2c51e6031f7d (diff)
first step to use the new myldap interface
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-ldapd@468 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nslcd/shadow.c')
-rw-r--r--nslcd/shadow.c139
1 files changed, 51 insertions, 88 deletions
diff --git a/nslcd/shadow.c b/nslcd/shadow.c
index 82335a9..0ea42b4 100644
--- a/nslcd/shadow.c
+++ b/nslcd/shadow.c
@@ -115,26 +115,6 @@ static void shadow_init(void)
shadow_attrs[9]=NULL;
}
-/* macros for expanding the NSLCD_SHADOW macro */
-#define NSLCD_STRING(field) WRITE_STRING(fp,field)
-#define NSLCD_INT32(field) WRITE_INT32(fp,field)
-#define SHADOW_NAME result->sp_namp
-#define SHADOW_PASSWD result->sp_pwdp
-#define SHADOW_LASTCHANGE result->sp_lstchg
-#define SHADOW_MINDAYS result->sp_min
-#define SHADOW_MAXDAYS result->sp_max
-#define SHADOW_WARN result->sp_warn
-#define SHADOW_INACT result->sp_inact
-#define SHADOW_EXPIRE result->sp_expire
-#define SHADOW_FLAG result->sp_flag
-
-static int write_spwd(TFILE *fp,struct spwd *result)
-{
- int32_t tmpint32;
- NSLCD_SHADOW;
- return 0;
-}
-
static int
_nss_ldap_shadow_date (const char *val)
{
@@ -169,40 +149,39 @@ _nss_ldap_shadow_handle_flag (struct spwd *sp)
}
static enum nss_status _nss_ldap_parse_sp(
- MYLDAP_SESSION *session,LDAPMessage *e,struct ldap_state UNUSED(*state),
- void *result,char *buffer,size_t buflen)
+ MYLDAP_ENTRY *entry,
+ struct spwd *sp,char *buffer,size_t buflen)
{
- struct spwd *sp = (struct spwd *) result;
enum nss_status stat;
char *tmp = NULL;
- stat=_nss_ldap_assign_userpassword(session,e,attmap_shadow_userPassword,&sp->sp_pwdp,&buffer,&buflen);
+ stat=_nss_ldap_assign_userpassword(entry,attmap_shadow_userPassword,&sp->sp_pwdp,&buffer,&buflen);
if (stat != NSS_STATUS_SUCCESS)
return stat;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_uid,&sp->sp_namp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_uid,&sp->sp_namp,&buffer,&buflen);
if (stat != NSS_STATUS_SUCCESS)
return stat;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowLastChange,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowLastChange,&tmp,&buffer,&buflen);
sp->sp_lstchg = (stat == NSS_STATUS_SUCCESS) ? _nss_ldap_shadow_date (tmp) : -1;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowMax,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowMax,&tmp,&buffer,&buflen);
sp->sp_max = (stat == NSS_STATUS_SUCCESS) ? atol (tmp) : -1;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowMin,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowMin,&tmp,&buffer,&buflen);
sp->sp_min = (stat == NSS_STATUS_SUCCESS) ? atol (tmp) : -1;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowWarning,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowWarning,&tmp,&buffer,&buflen);
sp->sp_warn = (stat == NSS_STATUS_SUCCESS) ? atol (tmp) : -1;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowInactive,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowInactive,&tmp,&buffer,&buflen);
sp->sp_inact = (stat == NSS_STATUS_SUCCESS) ? atol (tmp) : -1;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowExpire,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowExpire,&tmp,&buffer,&buflen);
sp->sp_expire = (stat == NSS_STATUS_SUCCESS) ? _nss_ldap_shadow_date (tmp) : -1;
- stat=_nss_ldap_assign_attrval(session,e,attmap_shadow_shadowFlag,&tmp,&buffer,&buflen);
+ stat=_nss_ldap_assign_attrval(entry,attmap_shadow_shadowFlag,&tmp,&buffer,&buflen);
sp->sp_flag = (stat == NSS_STATUS_SUCCESS) ? atol (tmp) : 0;
_nss_ldap_shadow_handle_flag(sp);
@@ -210,66 +189,50 @@ static enum nss_status _nss_ldap_parse_sp(
return NSS_STATUS_SUCCESS;
}
-int nslcd_shadow_byname(TFILE *fp,MYLDAP_SESSION *session)
+/* macros for expanding the NSLCD_SHADOW macro */
+#define NSLCD_STRING(field) WRITE_STRING(fp,field)
+#define NSLCD_INT32(field) WRITE_INT32(fp,field)
+#define SHADOW_NAME result.sp_namp
+#define SHADOW_PASSWD result.sp_pwdp
+#define SHADOW_LASTCHANGE result.sp_lstchg
+#define SHADOW_MINDAYS result.sp_min
+#define SHADOW_MAXDAYS result.sp_max
+#define SHADOW_WARN result.sp_warn
+#define SHADOW_INACT result.sp_inact
+#define SHADOW_EXPIRE result.sp_expire
+#define SHADOW_FLAG result.sp_flag
+
+static int write_shadow(TFILE *fp,MYLDAP_ENTRY *entry)
{
int32_t tmpint32;
- char name[256];
- char filter[1024];
- int retv;
struct spwd result;
char buffer[1024];
- /* read request parameters */
- READ_STRING_BUF2(fp,name,sizeof(name));
- /* log call */
- log_log(LOG_DEBUG,"nslcd_shadow_byname(%s)",name);
- /* write the response header */
- WRITE_INT32(fp,NSLCD_VERSION);
- WRITE_INT32(fp,NSLCD_ACTION_SHADOW_BYNAME);
- /* do the LDAP request */
- mkfilter_shadow_byname(name,filter,sizeof(filter));
- shadow_init();
- retv=_nss_ldap_getbyname(session,&result,buffer,1024,
- shadow_base,shadow_scope,filter,shadow_attrs,
- _nss_ldap_parse_sp);
- /* write the response */
- WRITE_INT32(fp,retv);
- if (retv==NSLCD_RESULT_SUCCESS)
- if (write_spwd(fp,&result))
- return -1;
- /* we're done */
+ if (_nss_ldap_parse_sp(entry,&result,buffer,sizeof(buffer))!=NSS_STATUS_SUCCESS)
+ return 0;
+ /* write the result code */
+ WRITE_INT32(fp,NSLCD_RESULT_SUCCESS);
+ /* write the entry */
+ NSLCD_SHADOW;
return 0;
}
-int nslcd_shadow_all(TFILE *fp,MYLDAP_SESSION *session)
-{
- int32_t tmpint32;
- struct ent_context context;
- /* these are here for now until we rewrite the LDAP code */
- struct spwd result;
- char buffer[1024];
- int retv;
- /* log call */
- log_log(LOG_DEBUG,"nslcd_shadow_all()");
- /* write the response header */
- WRITE_INT32(fp,NSLCD_VERSION);
- WRITE_INT32(fp,NSLCD_ACTION_SHADOW_ALL);
- /* initialize context */
- _nss_ldap_ent_context_init(&context,session);
- /* loop over all results */
- shadow_init();
- while ((retv=_nss_ldap_getent(&context,&result,buffer,sizeof(buffer),
- shadow_base,shadow_scope,shadow_filter,shadow_attrs,
- _nss_ldap_parse_sp))==NSLCD_RESULT_SUCCESS)
- {
- /* write the result */
- WRITE_INT32(fp,retv);
- if (write_spwd(fp,&result))
- return -1;
- }
- /* write the final result code */
- WRITE_INT32(fp,retv);
- /* FIXME: if a previous call returns what happens to the context? */
- _nss_ldap_ent_context_cleanup(&context);
- /* we're done */
- return 0;
-}
+NSLCD_HANDLE(
+ shadow,byname,
+ char name[256];
+ char filter[1024];
+ READ_STRING_BUF2(fp,name,sizeof(name));,
+ log_log(LOG_DEBUG,"nslcd_shadow_byname(%s)",name);,
+ NSLCD_ACTION_SHADOW_BYNAME,
+ mkfilter_shadow_byname(name,filter,sizeof(filter)),
+ write_shadow(fp,entry)
+)
+
+NSLCD_HANDLE(
+ shadow,all,
+ const char *filter;
+ /* no parameters to read */,
+ log_log(LOG_DEBUG,"nslcd_shadow_all()");,
+ NSLCD_ACTION_SHADOW_ALL,
+ (filter=shadow_filter,0),
+ write_shadow(fp,entry)
+)