diff options
Diffstat (limited to 'nslcd/common.h')
-rw-r--r-- | nslcd/common.h | 235 |
1 files changed, 122 insertions, 113 deletions
diff --git a/nslcd/common.h b/nslcd/common.h index a7be8c5..5161466 100644 --- a/nslcd/common.h +++ b/nslcd/common.h @@ -42,22 +42,23 @@ the stream is not closed because the caller closes the stream */ -#define ERROR_OUT_WRITEERROR(fp) \ - log_log(LOG_WARNING,"error writing to client: %s",strerror(errno)); \ +#define ERROR_OUT_WRITEERROR(fp) \ + log_log(LOG_WARNING, "error writing to client: %s", strerror(errno)); \ return -1; -#define ERROR_OUT_READERROR(fp) \ - log_log(LOG_WARNING,"error reading from client: %s",strerror(errno)); \ +#define ERROR_OUT_READERROR(fp) \ + log_log(LOG_WARNING, "error reading from client: %s", strerror(errno)); \ return -1; -#define ERROR_OUT_BUFERROR(fp) \ - log_log(LOG_WARNING,"client supplied argument %d bytes too large",tmpint32); \ +#define ERROR_OUT_BUFERROR(fp) \ + log_log(LOG_WARNING, "client supplied argument %d bytes too large", \ + tmpint32); \ return -1; /* a simple wrapper around snprintf, returns 0 if ok, -1 on error */ -int mysnprintf(char *buffer,size_t buflen,const char *format, ...) - LIKE_PRINTF(3,4); +int mysnprintf(char *buffer, size_t buflen, const char *format, ...) + LIKE_PRINTF(3, 4); /* return the fully qualified domain name of the current host the returned value does not need to be freed but is re-used for every @@ -69,25 +70,25 @@ MUST_USE const char *getfqdn(void); /etc/group or /etc/shadow depending upon what is in the directory. This function will return NULL if no passwd is found and will return the literal value in the directory if conversion is not possible. */ -const char *get_userpassword(MYLDAP_ENTRY *entry,const char *attr, - char *buffer,size_t buflen); +const char *get_userpassword(MYLDAP_ENTRY *entry, const char *attr, + char *buffer, size_t buflen); /* write out an address, parsing the addr value */ -int write_address(TFILE *fp,MYLDAP_ENTRY *entry,const char *attr, +int write_address(TFILE *fp, MYLDAP_ENTRY *entry, const char *attr, const char *addr); /* a helper macro to write out addresses and bail out on errors */ -#define WRITE_ADDRESS(fp,entry,attr,addr) \ - if (write_address(fp,entry,attr,addr)) \ +#define WRITE_ADDRESS(fp, entry, attr, addr) \ + if (write_address(fp, entry, attr, addr)) \ return -1; /* read an address from the stream */ -int read_address(TFILE *fp,char *addr,int *addrlen,int *af); +int read_address(TFILE *fp, char *addr, int *addrlen, int *af); /* helper macro to read an address from the stream */ -#define READ_ADDRESS(fp,addr,len,af) \ - len=(int)sizeof(addr); \ - if (read_address(fp,addr,&(len),&(af))) \ +#define READ_ADDRESS(fp, addr, len, af) \ + len = (int)sizeof(addr); \ + if (read_address(fp, addr, &(len), &(af))) \ return -1; /* convert the provided string representation of a sid @@ -103,28 +104,33 @@ MUST_USE int isvalidname(const char *name); /* Perform an LDAP lookup to translate the DN into a uid. This function either returns NULL or a strdup()ed string. */ -MUST_USE char *lookup_dn2uid(MYLDAP_SESSION *session,const char *dn,int *rcp,char *buf,size_t buflen); +MUST_USE char *lookup_dn2uid(MYLDAP_SESSION *session, const char *dn, + int *rcp, char *buf, size_t buflen); /* transforms the DN info a uid doing an LDAP lookup if needed */ -MUST_USE char *dn2uid(MYLDAP_SESSION *session,const char *dn,char *buf,size_t buflen); +MUST_USE char *dn2uid(MYLDAP_SESSION *session, const char *dn, char *buf, + size_t buflen); /* use the user id to lookup an LDAP entry */ -MYLDAP_ENTRY *uid2entry(MYLDAP_SESSION *session,const char *uid,int *rcp); +MYLDAP_ENTRY *uid2entry(MYLDAP_SESSION *session, const char *uid, int *rcp); /* transforms the uid into a DN by doing an LDAP lookup */ -MUST_USE char *uid2dn(MYLDAP_SESSION *session,const char *uid,char *buf,size_t buflen); +MUST_USE char *uid2dn(MYLDAP_SESSION *session, const char *uid, char *buf, + size_t buflen); /* try to update the shadowLastChange attribute of the entry if possible */ -int update_lastchange(MYLDAP_SESSION *session,const char *userdn); +int update_lastchange(MYLDAP_SESSION *session, const char *userdn); /* use the user id to lookup an LDAP entry with the shadow attributes - requested*/ -MYLDAP_ENTRY *shadow_uid2entry(MYLDAP_SESSION *session,const char *username,int *rcp); + requested */ +MYLDAP_ENTRY *shadow_uid2entry(MYLDAP_SESSION *session, const char *username, + int *rcp); /* return shadown information */ -void get_shadow_properties(MYLDAP_ENTRY *entry,long *lastchangedate, - long *mindays,long *maxdays,long *warndays, - long *inactdays,long *expiredate,unsigned long *flag); +void get_shadow_properties(MYLDAP_ENTRY *entry, long *lastchangedate, + long *mindays, long *maxdays, long *warndays, + long *inactdays, long *expiredate, + unsigned long *flag); /* check whether the nsswitch file should be reloaded */ @@ -170,7 +176,7 @@ int nsswitch_shadow_uses_ldap(void); #ifdef WANT_STRTOUI /* provide a strtoui() if it is needed */ -unsigned int strtoui(const char *nptr,char **endptr,int base); +unsigned int strtoui(const char *nptr, char **endptr, int base); #endif /* WANT_STRTOUI */ /* these are the functions for initialising the database specific @@ -189,94 +195,97 @@ void shadow_init(void); /* these are the different functions that handle the database specific actions, see nslcd.h for the action descriptions */ -int nslcd_config_get(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_alias_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_alias_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_ether_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_ether_byether(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_ether_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_group_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_group_bygid(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_group_bymember(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_group_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_host_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_host_byaddr(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_host_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_netgroup_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_network_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_network_byaddr(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_network_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_passwd_byname(TFILE *fp,MYLDAP_SESSION *session,uid_t calleruid); -int nslcd_passwd_byuid(TFILE *fp,MYLDAP_SESSION *session,uid_t calleruid); -int nslcd_passwd_all(TFILE *fp,MYLDAP_SESSION *session,uid_t calleruid); -int nslcd_protocol_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_protocol_bynumber(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_protocol_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_rpc_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_rpc_bynumber(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_rpc_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_service_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_service_bynumber(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_service_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_shadow_byname(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_shadow_all(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_pam_authc(TFILE *fp,MYLDAP_SESSION *session,uid_t calleruid); -int nslcd_pam_authz(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_pam_sess_o(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_pam_sess_c(TFILE *fp,MYLDAP_SESSION *session); -int nslcd_pam_pwmod(TFILE *fp,MYLDAP_SESSION *session,uid_t calleruid); +int nslcd_config_get(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_alias_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_alias_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_ether_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_ether_byether(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_ether_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_group_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_group_bygid(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_group_bymember(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_group_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_host_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_host_byaddr(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_host_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_netgroup_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_network_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_network_byaddr(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_network_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_passwd_byname(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid); +int nslcd_passwd_byuid(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid); +int nslcd_passwd_all(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid); +int nslcd_protocol_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_protocol_bynumber(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_protocol_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_rpc_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_rpc_bynumber(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_rpc_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_service_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_service_bynumber(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_service_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_shadow_byname(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_shadow_all(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_pam_authc(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid); +int nslcd_pam_authz(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_pam_sess_o(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_pam_sess_c(TFILE *fp, MYLDAP_SESSION *session); +int nslcd_pam_pwmod(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid); /* macros for generating service handling code */ -#define NSLCD_HANDLE(db,fn,readfn,action,mkfilter,writefn) \ - int nslcd_##db##_##fn(TFILE *fp,MYLDAP_SESSION *session) \ - NSLCD_HANDLE_BODY(db,fn,readfn,action,mkfilter,writefn) -#define NSLCD_HANDLE_UID(db,fn,readfn,action,mkfilter,writefn) \ - int nslcd_##db##_##fn(TFILE *fp,MYLDAP_SESSION *session,uid_t calleruid) \ - NSLCD_HANDLE_BODY(db,fn,readfn,action,mkfilter,writefn) -#define NSLCD_HANDLE_BODY(db,fn,readfn,action,mkfilter,writefn) \ - { \ - /* define common variables */ \ - int32_t tmpint32; \ - MYLDAP_SEARCH *search; \ - MYLDAP_ENTRY *entry; \ - const char *base; \ - int rc,i; \ - /* read request parameters */ \ - readfn; \ - /* write the response header */ \ - WRITE_INT32(fp,NSLCD_VERSION); \ - WRITE_INT32(fp,action); \ - /* prepare the search filter */ \ - if (mkfilter) \ - { \ - log_log(LOG_WARNING,"nslcd_" __STRING(db) "_" __STRING(fn) "(): filter buffer too small"); \ - return -1; \ - } \ - /* perform a search for each search base */ \ - for (i=0; (base=db##_bases[i])!=NULL; i++) \ - { \ - /* do the LDAP search */ \ - if ((search=myldap_search(session,base,db##_scope,filter,db##_attrs,NULL))==NULL) \ - return -1; \ - /* go over results */ \ - while ((entry=myldap_get_entry(search,&rc))!=NULL) \ - { \ - if (writefn) \ - return -1; \ - } \ - } \ - /* write the final result code */ \ - if (rc==LDAP_SUCCESS) \ - { \ - WRITE_INT32(fp,NSLCD_RESULT_END); \ - } \ - return 0; \ +#define NSLCD_HANDLE(db, fn, readfn, action, mkfilter, writefn) \ + int nslcd_##db##_##fn(TFILE *fp, MYLDAP_SESSION *session) \ + NSLCD_HANDLE_BODY(db, fn, readfn, action, mkfilter, writefn) +#define NSLCD_HANDLE_UID(db, fn, readfn, action, mkfilter, writefn) \ + int nslcd_##db##_##fn(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid) \ + NSLCD_HANDLE_BODY(db, fn, readfn, action, mkfilter, writefn) +#define NSLCD_HANDLE_BODY(db, fn, readfn, action, mkfilter, writefn) \ + { \ + /* define common variables */ \ + int32_t tmpint32; \ + MYLDAP_SEARCH *search; \ + MYLDAP_ENTRY *entry; \ + const char *base; \ + int rc, i; \ + /* read request parameters */ \ + readfn; \ + /* write the response header */ \ + WRITE_INT32(fp, NSLCD_VERSION); \ + WRITE_INT32(fp, action); \ + /* prepare the search filter */ \ + if (mkfilter) \ + { \ + log_log(LOG_WARNING, "nslcd_" __STRING(db) "_" __STRING(fn) \ + "(): filter buffer too small"); \ + return -1; \ + } \ + /* perform a search for each search base */ \ + for (i = 0; (base = db##_bases[i]) != NULL; i++) \ + { \ + /* do the LDAP search */ \ + search = myldap_search(session, base, db##_scope, filter, \ + db##_attrs, NULL); \ + if (search == NULL) \ + return -1; \ + /* go over results */ \ + while ((entry = myldap_get_entry(search, &rc)) != NULL) \ + { \ + if (writefn) \ + return -1; \ + } \ + } \ + /* write the final result code */ \ + if (rc == LDAP_SUCCESS) \ + { \ + WRITE_INT32(fp, NSLCD_RESULT_END); \ + } \ + return 0; \ } -/* macro to compare strings - Use the ignorecase config option to determine whether or not to do a - case-sensitive match */ -#define STR_CMP(str1,str2) \ - (nslcd_cfg->ldc_ignorecase == 1 ? strcasecmp(str1,str2) : strcmp(str1,str2)) +/* macro to compare strings which uses the ignorecase config option to + determine whether or not to do a case-sensitive match */ +#define STR_CMP(str1, str2) \ + (nslcd_cfg->ldc_ignorecase == 1 ? \ + strcasecmp(str1, str2) : strcmp(str1, str2)) #endif /* not NSLCD__COMMON_H */ |