]> git.sur5r.net Git - openldap/blobdiff - contrib/slapd-modules/nssov/nssov.c
ITS#8097 nssov: update to protocol version 2
[openldap] / contrib / slapd-modules / nssov / nssov.c
index e734e3b2b223b6dc6356cf6dc88659c1e4e1c39a..e55c0c351fb032650694c138525e0d6ae83217c8 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 
  *
- * Copyright 2008-2013 The OpenLDAP Foundation.
+ * Copyright 2008-2015 The OpenLDAP Foundation.
  * Portions Copyright 2008 by Howard Chu, Symas Corp.
  * Portions Copyright 2013 by Ted C. Cheng, Symas Corp.
  * All rights reserved.
@@ -142,7 +142,7 @@ int write_address(TFILE *fp,struct berval *addr)
                /* write the address length */
                WRITE_INT32(fp,sizeof(struct in_addr));
                /* write the address itself (in network byte order) */
-               WRITE_TYPE(fp,ipv4addr,struct in_addr);
+               WRITE(fp,&ipv4addr,sizeof(struct in_addr));
        }
        else if (inet_pton(AF_INET6,addr->bv_val,&ipv6addr)>0)
        {
@@ -151,7 +151,7 @@ int write_address(TFILE *fp,struct berval *addr)
                /* write the address length */
                WRITE_INT32(fp,sizeof(struct in6_addr));
                /* write the address itself (in network byte order) */
-               WRITE_TYPE(fp,ipv6addr,struct in6_addr);
+               WRITE(fp,&ipv6addr,sizeof(struct in6_addr));
        }
        else
        {
@@ -240,14 +240,14 @@ static int read_header(TFILE *fp,int32_t *action)
 {
   int32_t tmpint32;
   /* read the protocol version */
-  READ_TYPE(fp,tmpint32,int32_t);
+  READ_INT32(fp,tmpint32);
   if (tmpint32 != (int32_t)NSLCD_VERSION)
   {
     Debug( LDAP_DEBUG_TRACE,"nssov: wrong nslcd version id (%d)\n",(int)tmpint32,0,0);
     return -1;
   }
   /* read the request type */
-  READ(fp,action,sizeof(int32_t));
+  READ_INT32(fp,*action);
   return 0;
 }
 
@@ -255,34 +255,30 @@ int nssov_config(nssov_info *ni,TFILE *fp,Operation *op)
 {
        int opt;
        int32_t tmpint32;
-       struct berval *msg = BER_BVC("");
-       int rc = NSLCD_PAM_SUCCESS;
 
        READ_INT32(fp,opt);
 
        Debug(LDAP_DEBUG_TRACE, "nssov_config (%d)\n",opt,0,0);
 
+       WRITE_INT32(fp,NSLCD_VERSION);
+       WRITE_INT32(fp,NSLCD_ACTION_CONFIG_GET);
+       WRITE_INT32(fp,NSLCD_RESULT_BEGIN);
+
        switch (opt) {
        case NSLCD_CONFIG_PAM_PASSWORD_PROHIBIT_MESSAGE:
-               /* request for pam password_prothibit_message */
+               /* request for pam password_prohibit_message */
                /* nssov_pam prohibits password  */
                if (!BER_BVISEMPTY(&ni->ni_pam_password_prohibit_message)) {
                        Debug(LDAP_DEBUG_TRACE,"nssov_config(): %s (%s)\n",
                                "password_prohibit_message",
                                ni->ni_pam_password_prohibit_message.bv_val,0);
-                       msg = &ni->ni_pam_password_prohibit_message;
-                       rc = NSLCD_PAM_PERM_DENIED;
+                       WRITE_STRING(fp,ni->ni_pam_password_prohibit_message.bv_val);
                }
-               /* fall through */
        default:
+               /* all other config options are ignored */
                break;
        }
 
-done:;
-       WRITE_INT32(fp,NSLCD_VERSION);
-       WRITE_INT32(fp,NSLCD_ACTION_CONFIG_GET);
-       WRITE_INT32(fp,NSLCD_RESULT_BEGIN);
-       WRITE_BERVAL(fp,msg);
        WRITE_INT32(fp,NSLCD_RESULT_END);
        return 0;
 }
@@ -369,11 +365,11 @@ static void handleconnection(nssov_info *ni,int sock,Operation *op)
     case NSLCD_ACTION_SERVICE_ALL:      (void)nssov_service_all(ni,fp,op); break;
     case NSLCD_ACTION_SHADOW_BYNAME:    if (uid==0) (void)nssov_shadow_byname(ni,fp,op); break;
     case NSLCD_ACTION_SHADOW_ALL:       if (uid==0) (void)nssov_shadow_all(ni,fp,op); break;
-       case NSLCD_ACTION_PAM_AUTHC:            (void)pam_authc(ni,fp,op); break;
+       case NSLCD_ACTION_PAM_AUTHC:            (void)pam_authc(ni,fp,op,uid); break;
        case NSLCD_ACTION_PAM_AUTHZ:            (void)pam_authz(ni,fp,op); break;
        case NSLCD_ACTION_PAM_SESS_O:           if (uid==0) (void)pam_sess_o(ni,fp,op); break;
        case NSLCD_ACTION_PAM_SESS_C:           if (uid==0) (void)pam_sess_c(ni,fp,op); break;
-       case NSLCD_ACTION_PAM_PWMOD:            (void)pam_pwmod(ni,fp,op); break;
+       case NSLCD_ACTION_PAM_PWMOD:            (void)pam_pwmod(ni,fp,op,uid); break;
        case NSLCD_ACTION_CONFIG_GET:                   (void)nssov_config(ni,fp,op); break;
     default:
       Debug( LDAP_DEBUG_ANY,"nssov: invalid request id: %d",(int)action,0,0);