#include "config.h"
#include "tools.h"
#include "citserver.h"
+#include "citadel_dirs.h"
#include "genstamp.h"
/*
void put_visit(struct visit *newvisit)
{
char IndexBuf[32];
- int IndexLen;
+ int IndexLen = 0;
/* Generate an index */
IndexLen = GenerateRelationshipIndex(IndexBuf,
}
-#ifdef ENABLE_AUTOLOGIN
/*
* getuserbyuid() - get user by system uid (for PAM mode authentication)
* returns 0 if user was found
}
return (-1);
}
-#endif /* ENABLE_AUTOLOGIN */
return login_not_found;
}
-#ifdef ENABLE_AUTOLOGIN
-
- /* If this is an autologin build, the only valid auth source is the
- * host operating system.
- */
- struct passwd pd;
- struct passwd *tempPwdPtr;
- char pwdbuffer[256];
+ if (config.c_auth_mode == 1) {
- lprintf(CTDL_DEBUG, "asking host about <%s>\n", username);
- getpwnam_r(username, &pd, pwdbuffer, sizeof pwdbuffer, &tempPwdPtr);
- if (tempPwdPtr == NULL) {
- return login_not_found;
- }
- lprintf(CTDL_DEBUG, "found it! uid=%d, gecos=%s\n", pd.pw_uid, pd.pw_gecos);
+ /* host auth mode */
- /* Locate the associated Citadel account.
- * If not found, make one attempt to create it.
- */
- found_user = getuserbyuid(&CC->user, pd.pw_uid);
- if (found_user != 0) {
- create_user(username, 0);
+ struct passwd pd;
+ struct passwd *tempPwdPtr;
+ char pwdbuffer[256];
+
+ lprintf(CTDL_DEBUG, "asking host about <%s>\n", username);
+ getpwnam_r(username, &pd, pwdbuffer, sizeof pwdbuffer, &tempPwdPtr);
+ if (tempPwdPtr == NULL) {
+ return login_not_found;
+ }
+ lprintf(CTDL_DEBUG, "found it! uid=%d, gecos=%s\n", pd.pw_uid, pd.pw_gecos);
+
+ /* Locate the associated Citadel account.
+ * If not found, make one attempt to create it.
+ */
found_user = getuserbyuid(&CC->user, pd.pw_uid);
- }
+ if (found_user != 0) {
+ create_user(username, 0);
+ found_user = getuserbyuid(&CC->user, pd.pw_uid);
+ }
-#else /* ENABLE_AUTOLOGIN */
- struct recptypes *valid = NULL;
+ }
- /* First, try to log in as if the supplied name is a display name */
- found_user = getuser(&CC->user, username);
+ else {
+ /* native auth mode */
- /* If that didn't work, try to log in as if the supplied name
- * is an e-mail address
- */
- if (found_user != 0) {
- valid = validate_recipients(username);
- if (valid != NULL) {
- if (valid->num_local == 1) {
- found_user = getuser(&CC->user,
- valid->recp_local);
+ struct recptypes *valid = NULL;
+
+ /* First, try to log in as if the supplied name is a display name */
+ found_user = getuser(&CC->user, username);
+
+ /* If that didn't work, try to log in as if the supplied name
+ * is an e-mail address
+ */
+ if (found_user != 0) {
+ valid = validate_recipients(username);
+ if (valid != NULL) {
+ if (valid->num_local == 1) {
+ found_user = getuser(&CC->user, valid->recp_local);
+ }
+ free(valid);
}
- free(valid);
}
}
-#endif /* ENABLE_AUTOLOGIN */
-
/* Did we find something? */
if (found_user == 0) {
if (((CC->nologin)) && (CC->user.axlevel < 6)) {
*/
void session_startup(void)
{
- int i;
+ int i = 0;
lprintf(CTDL_NOTICE, "<%s> logged in\n", CC->curr_user);
CC->user.axlevel = 6;
}
-#ifdef ENABLE_AUTOLOGIN
/* If we're authenticating off the host system, automatically give
* root the highest level of access.
*/
- if (CC->user.uid == 0) {
- CC->user.axlevel = 6;
+ if (config.c_auth_mode == 1) {
+ if (CC->user.uid == 0) {
+ CC->user.axlevel = 6;
+ }
}
-#endif
lputuser(&CC->user);
* make that assumption.
*/
strcpy(who->fake_username, "");
- strcpy(who->fake_postname, "");
strcpy(who->fake_hostname, "");
strcpy(who->fake_roomname, "");
who->logged_in = 0;
char buf[24];
if (pipe(pipev)) {
- lprintf(CTDL_ERR, "pipe failed (%s): denying autologin access for "
+ lprintf(CTDL_ERR, "pipe failed (%s): denying host auth access for "
"uid %ld\n", strerror(errno), (long)uid);
return 0;
}
switch (pid = fork()) {
case -1:
- lprintf(CTDL_ERR, "fork failed (%s): denying autologin access for "
+ lprintf(CTDL_ERR, "fork failed (%s): denying host auth access for "
"uid %ld\n", strerror(errno), (long)uid);
close(pipev[0]);
close(pipev[1]);
}
close(pipev[0]);
- execl(CTDLDIR "/chkpwd", CTDLDIR "/chkpwd", NULL);
- perror(CTDLDIR "/chkpwd");
+ execl(file_chkpwd, file_chkpwd, NULL);
+ perror(file_chkpwd);
exit(1);
}
while (waitpid(pid, &status, 0) == -1)
if (errno != EINTR) {
- lprintf(CTDL_ERR, "waitpid failed (%s): denying autologin "
+ lprintf(CTDL_ERR, "waitpid failed (%s): denying host auth "
"access for uid %ld\n",
strerror(errno), (long)uid);
return 0;
}
code = (-1);
+ if (config.c_auth_mode == 1) {
-#ifdef ENABLE_AUTOLOGIN
+ /* host auth mode */
- if (validpw(CC->user.uid, password)) {
- code = 0;
- /* we could get rid of this */
- lgetuser(&CC->user, CC->curr_user);
- safestrncpy(CC->user.password, password, sizeof CC->user.password);
- lputuser(&CC->user);
- /* */
- }
- else {
- code = (-1);
+ if (validpw(CC->user.uid, password)) {
+ code = 0;
+
+ /*
+ * sooper-seekrit hack: populate the password field in the
+ * citadel database with the password that the user typed,
+ * if it's correct. This allows most sites to convert from
+ * host auth to native auth if they want to. If you think
+ * this is a security hazard, comment it out.
+ */
+
+ lgetuser(&CC->user, CC->curr_user);
+ safestrncpy(CC->user.password, password, sizeof CC->user.password);
+ lputuser(&CC->user);
+
+ /*
+ * (sooper-seekrit hack ends here)
+ */
+
+ }
+ else {
+ code = (-1);
+ }
}
-#else /* ENABLE_AUTOLOGIN */
+ else {
- strproc(password);
- strproc(CC->user.password);
- code = strcasecmp(CC->user.password, password);
- strproc(password);
- strproc(CC->user.password);
- code = strcasecmp(CC->user.password, password);
+ /* native auth mode */
-#endif /* ENABLE_AUTOLOGIN */
+ strproc(password);
+ strproc(CC->user.password);
+ code = strcasecmp(CC->user.password, password);
+ strproc(password);
+ strproc(CC->user.password);
+ code = strcasecmp(CC->user.password, password);
+ }
if (!code) {
do_login();
safestrncpy(username, newusername, sizeof username);
strproc(username);
-#ifdef ENABLE_AUTOLOGIN
- struct passwd pd;
- struct passwd *tempPwdPtr;
- char pwdbuffer[256];
+ if (config.c_auth_mode == 1) {
- getpwnam_r(username, &pd, pwdbuffer, sizeof pwdbuffer, &tempPwdPtr);
- if (tempPwdPtr != NULL) {
- extract_token(username, pd.pw_gecos, 0, ',', sizeof username);
- uid = pd.pw_uid;
- }
- else {
- return (ERROR + NO_SUCH_USER);
+ /* host auth mode */
+
+ struct passwd pd;
+ struct passwd *tempPwdPtr;
+ char pwdbuffer[256];
+
+ getpwnam_r(username, &pd, pwdbuffer, sizeof pwdbuffer, &tempPwdPtr);
+ if (tempPwdPtr != NULL) {
+ extract_token(username, pd.pw_gecos, 0, ',', sizeof username);
+ uid = pd.pw_uid;
+ }
+ else {
+ return (ERROR + NO_SUCH_USER);
+ }
}
-#endif
if (!getuser(&usbuf, username)) {
return (ERROR + ALREADY_EXISTS);
int a;
char username[26];
-#ifdef ENABLE_AUTOLOGIN
- cprintf("%d This system does not use native mode authentication.\n",
- ERROR + NOT_HERE);
- return;
-#endif /* ENABLE_AUTOLOGIN */
+ if (config.c_auth_mode == 1) {
+ cprintf("%d This system does not use native mode authentication.\n",
+ ERROR + NOT_HERE);
+ return;
+ }
if (config.c_disable_newu) {
cprintf("%d Self-service user account creation "