We are no longer using the EXTAUTH table.
authorArt Cancro <ajc@citadel.org>
Thu, 27 Apr 2023 21:54:19 +0000 (17:54 -0400)
committerArt Cancro <ajc@citadel.org>
Thu, 27 Apr 2023 21:54:19 +0000 (17:54 -0400)
Perhaps in the future it will return in some other form.
LDAP auth still uses the uid, so we're searching for that the old way.

citadel/server/citadel_defs.h
citadel/server/modules/upgrade/serv_upgrade.c
citadel/server/user_ops.c

index ee05b19eef3f5f8bd9f89ebc5265532c23f9c85e..7444081410742d84331dc4e19735fe9d57424d7d 100644 (file)
@@ -21,7 +21,7 @@
 #include "typesize.h"
 #include "ipcdef.h"
 
-#define REV_LEVEL 972          // This version
+#define REV_LEVEL 973          // This version
 #define REV_MIN                591     // Oldest compatible database
 #define EXPORT_REV_MIN 931     // Oldest compatible export files
 #define LIBCITADEL_MIN 951     // Minimum required version of libcitadel
index 6db89583375cfbc3f2b8def5685a7673674c4630..4c25352c85c3651bd8304875b3accce9440c0a5e 100644 (file)
@@ -478,10 +478,12 @@ void pre_startup_upgrades(void) {
                        CtdlPutRoom(&QRoom);
                }
        }
-
        if ((oldver > 000) && (oldver < 902)) {
                ingest_old_roominfo_and_roompic_files();
        }
+       if ((oldver > 000) && (oldver < 973)) {                         // This was the old extauth table.
+               cdb_trunc(CDB_UNUSED1);                                 // We will do this better someday.
+       }
 
        CtdlSetConfigInt("MM_hosted_upgrade_level", REV_LEVEL);
 
index a47e5a987ed4e6ddbb5f239cbd89a5d2c2e53819..99bf5b0229f1cbda915430aef94bed937bc24cc0 100644 (file)
@@ -419,22 +419,32 @@ void rebuild_usersbynumber(void) {
 }
 
 
-// Helper function for getuserbyuid()
-void getuserbyuid_backend(char *username, void *data) {
-       struct ctdluser u;
-       syslog(LOG_DEBUG, "user_ops: FIXME %s", username);
-}
-
-
 // getuserbyuid()      Get user by system uid (for PAM mode authentication)
 //                     Returns 0 if user was found
-//                      TODO: make an index so we don't have to do this the long way
 int getuserbyuid(struct ctdluser *usbuf, uid_t number) {
 
-       ForEachUser(getuserbyuid_backend, NULL);
+       struct cdbdata *cdbus;
+       struct ctdluser *usptr;
+       int return_value = (-1);
+
+       // Yes, we do this the long way.
+       // No, we don't use CtdlForEachUser() because that requires multiple reads for each record
+       // TODO: make an index
+       cdb_rewind(CDB_USERS);
+       while (cdbus = cdb_next_item(CDB_USERS), cdbus != NULL) {
+               usptr = (struct ctdluser *) cdbus->ptr;
 
-       //return(CtdlGetUser(usbuf, key));
-       return(-1);
+               if (usptr->uid == number) {
+                       syslog(LOG_DEBUG, "user_ops: found uid=%d username=%s", usptr->uid, usptr->fullname);
+                       memcpy(usbuf, usptr, sizeof(struct ctdluser));
+                       return_value = 0;       // success
+               }
+       }
+
+       if (return_value != 0) {
+               syslog(LOG_DEBUG, "user_ops: no user found with uid=%d", number);
+       }
+       return(return_value);
 }