]> code.citadel.org Git - citadel.git/blobdiff - citadel/user_ops.c
* Fixed striplt() to only remove leading and trailing blanks, but no others. It...
[citadel.git] / citadel / user_ops.c
index b574fbd02fde850c39447eb2a9c5211f814d7faf..1b2eddd5f5a8c6162968135df19b2571530ab8d1 100644 (file)
@@ -52,6 +52,8 @@
 #include "threads.h"
 #include "citadel_ldap.h"
 
+#include "ctdl_module.h"
+
 /* These pipes are used to talk to the chkpwd daemon, which is forked during startup */
 int chkpwd_write_pipe[2];
 int chkpwd_read_pipe[2];
@@ -543,9 +545,30 @@ int CtdlLoginExistingUser(char *authname, char *trythisname)
        }
 
 #ifdef HAVE_LDAP
-       else if (config.c_auth_mode == AUTHMODE_LDAP) {
+       else if ((config.c_auth_mode == AUTHMODE_LDAP) || (config.c_auth_mode == AUTHMODE_LDAP_AD)) {
+       
+               /* LDAP auth mode */
+
+               uid_t ldap_uid;
+               char ldap_cn[256];
+               char ldap_dn[256];
+
+               found_user = CtdlTryUserLDAP(username, ldap_dn, sizeof ldap_dn, ldap_cn, sizeof ldap_cn, &ldap_uid);
+               if (found_user != 0) {
+                       return login_not_found;
+               }
+
+               found_user = getuserbyuid(&CC->user, ldap_uid);
+               if (found_user != 0) {
+                       create_user(trythisname, 0);
+                       found_user = getuserbyuid(&CC->user, ldap_uid);
+               }
+
+               if (found_user == 0) {
+                       if (CC->ldap_dn != NULL) free(CC->ldap_dn);
+                       CC->ldap_dn = strdup(ldap_dn);
+               }
 
-               /* LDAP auth mode FIXME_LDAP */
        }
 #endif
 
@@ -594,8 +617,11 @@ void cmd_user(char *cmdbuf)
        char username[256];
        int a;
 
+       CtdlLogPrintf(CTDL_DEBUG, "cmd_user(%s)\n", cmdbuf);
        extract_token(username, cmdbuf, 0, '|', sizeof username);
+       CtdlLogPrintf(CTDL_DEBUG, "username: %s\n", username);
        striplt(username);
+       CtdlLogPrintf(CTDL_DEBUG, "username: %s\n", username);
 
        a = CtdlLoginExistingUser(NULL, username);
        switch (a) {
@@ -869,9 +895,16 @@ int CtdlTryPassword(char *password)
        }
 
 #ifdef HAVE_LDAP
-       else if (config.c_auth_mode == AUTHMODE_LDAP) {
+       else if ((config.c_auth_mode == AUTHMODE_LDAP) || (config.c_auth_mode == AUTHMODE_LDAP_AD)) {
+
+               /* LDAP auth mode */
 
-               /* LDAP auth mode FIXME_LDAP */
+               if ((CC->ldap_dn) && (!CtdlTryPasswordLDAP(CC->ldap_dn, password))) {
+                       code = 0;
+               }
+               else {
+                       code = (-1);
+               }
        }
 #endif
 
@@ -1083,7 +1116,13 @@ int create_user(char *newusername, int become_user)
                }
        }
 
-       /* FIXME_LDAP put something here */
+#ifdef HAVE_LDAP
+       if ((config.c_auth_mode == AUTHMODE_LDAP) || (config.c_auth_mode == AUTHMODE_LDAP_AD)) {
+               if (CtdlTryUserLDAP(username, NULL, 0, username, sizeof username, &uid) != 0) {
+                       return(ERROR + NO_SUCH_USER);
+               }
+       }
+#endif /* HAVE_LDAP */
        
        if ((retval = internal_create_user(username, &usbuf, uid)) != 0)
                return retval;
@@ -1304,7 +1343,7 @@ void cmd_creu(char *cmdbuf)
 /*
  * get user parameters
  */
-void cmd_getu(void)
+void cmd_getu(char *cmdbuf)
 {
 
        if (CtdlAccessCheck(ac_logged_in))
@@ -1489,6 +1528,8 @@ void cmd_invt_kick(char *iuser, int op) {
        return;
 }
 
+void cmd_invt(char *iuser) {cmd_invt_kick(iuser, 1);}
+void cmd_kick(char *iuser) {cmd_invt_kick(iuser, 0);}
 
 /*
  * Forget (Zap) the current room (API call)
@@ -1522,7 +1563,7 @@ int CtdlForgetThisRoom(void) {
 /*
  * forget (Zap) the current room
  */
-void cmd_forg(void)
+void cmd_forg(char *argbuf)
 {
 
        if (CtdlAccessCheck(ac_logged_in)) {
@@ -1540,7 +1581,7 @@ void cmd_forg(void)
 /*
  * Get Next Unregistered User
  */
-void cmd_gnur(void)
+void cmd_gnur(char *argbuf)
 {
        struct cdbdata *cdbus;
        struct ctdluser usbuf;
@@ -1693,7 +1734,7 @@ void cmd_list(char *cmdbuf)
 /*
  * assorted info we need to check at login
  */
-void cmd_chek(void)
+void cmd_chek(char *argbuf)
 {
        int mail = 0;
        int regis = 0;
@@ -1963,3 +2004,38 @@ void cmd_renu(char *cmdbuf)
 
        cprintf("%d An unknown error occurred.\n", ERROR);
 }
+
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+
+CTDL_MODULE_INIT(user_ops)
+{
+       CtdlRegisterProtoHook(cmd_user, "USER", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_pass, "PASS", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_creu, "CREU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_setp, "SETP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_getu, "GETU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_setu, "SETU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_slrp, "SLRP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_invt, "INVT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_kick, "KICK", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_forg, "FORG", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_gnur, "GNUR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_vali, "VALI", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_list, "LIST", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_chek, "CHEK", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_qusr, "QUSR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_agup, "AGUP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_asup, "ASUP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_seen, "SEEN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_gtsn, "GTSN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_view, "VIEW", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_renu, "RENU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_newu, "NEWU", "Autoconverted. TODO: document me.");
+       /* return our Subversion id for the Log */
+       return "$Id$";
+}