Creates a .forward file for users if they enter an email.

This commit is contained in:
Jacob Parker 2009-08-22 16:09:12 -04:00
parent fe9af9994e
commit dd895884a9
6 changed files with 31 additions and 11 deletions

View File

@ -109,7 +109,7 @@ def connected():
### Members ###
def create_member(username, password, name, program):
def create_member(username, password, name, program, email):
"""
Creates a UNIX user account with options tailored to CSC members.
@ -118,6 +118,7 @@ def create_member(username, password, name, program):
password - the desired UNIX password
name - the member's real name
program - the member's program of study
email - email to place in .forward
Exceptions:
InvalidArgument - on bad account attributes provided
@ -142,6 +143,7 @@ def create_member(username, password, name, program):
request.password = password
request.realname = name
request.program = program
request.email = email
out = remote.run_remote('adduser', request.SerializeToString())
@ -391,6 +393,7 @@ def create_club(username, name):
request.type = ceo_pb2.AddUser.CLUB
request.username = username
request.realname = name
out = remote.run_remote('adduser', request.SerializeToString())
response = ceo_pb2.AddUserResponse()

View File

@ -1,4 +1,4 @@
import ldap, urwid
import ldap, urwid #, re
from ceo import members, terms, uwldap
from ceo.urwid.widgets import *
from ceo.urwid.window import *
@ -51,7 +51,8 @@ class InfoPage(WizardPanel):
def init_widgets(self):
self.name = SingleEdit("Full name: ")
self.program = SingleEdit("Program of Study: ")
self.userid = LdapFilterWordEdit(uwldap.uri(), uwldap.base(), 'uid',
self.email = SingleEdit("Email: ")
self.userid = LdapFilterWordEdit(uwldap.uri(), uwldap.base(), 'uid',
{'cn':self.name, 'ou':self.program}, "Username: ")
self.widgets = [
urwid.Text( "Member Information" ),
@ -59,6 +60,7 @@ class InfoPage(WizardPanel):
self.userid,
self.name,
self.program,
self.email,
urwid.Divider(),
urwid.Text("Notes:"),
urwid.Text("- Make sure to check ID (watcard, drivers license)"),
@ -68,7 +70,7 @@ class InfoPage(WizardPanel):
self.state['userid'] = self.userid.get_edit_text()
self.state['name'] = self.name.get_edit_text()
self.state['program'] = self.program.get_edit_text()
self.state['email'] = self.email.get_edit_text()
if len( self.state['userid'] ) < 3:
self.focus_widget( self.userid )
set_status("Username is too short")
@ -173,10 +175,10 @@ class EndPage(WizardPanel):
problem = None
try:
if self.utype == 'member':
members.create_member( self.state['userid'], self.state['password'], self.state['name'], self.state['program'] )
members.create_member( self.state['userid'], self.state['password'], self.state['name'], self.state['program'], self.state['email'] )
members.register( self.state['userid'], terms.current() )
elif self.utype == 'clubuser':
members.create_member( self.state['userid'], self.state['password'], self.state['name'], self.state['program'] )
members.create_member( self.state['userid'], self.state['password'], self.state['name'], self.state['program'], self.state['email'] )
members.register_nonmember( self.state['userid'], terms.current() )
elif self.utype == 'club':
members.create_club( self.state['userid'], self.state['name'] )

View File

@ -16,6 +16,7 @@ message AddUser {
optional string password = 3;
optional string realname = 4;
optional string program = 5;
optional string email = 6;
}
message AddUserResponse {

View File

@ -27,7 +27,7 @@ static int set_acl(char *dir, char *acl_text, acl_type_t type) {
return 0;
}
int ceo_create_home(char *homedir, char *skel, uid_t uid, gid_t gid, char *access_acl, char *default_acl) {
int ceo_create_home(char *homedir, char *skel, uid_t uid, gid_t gid, char *access_acl, char *default_acl, char *email) {
int mask;
DIR *skeldir;
struct dirent *skelent;
@ -131,11 +131,25 @@ int ceo_create_home(char *homedir, char *skel, uid_t uid, gid_t gid, char *acces
closedir(skeldir);
if (email && strlen(email) >0) {
char dest[PATH_MAX];
snprintf(dest, sizeof(dest), "%s/%s", homedir, ".forward");
int destfd = open(dest, O_WRONLY|O_CREAT|O_EXCL, 0644);
if (write(destfd, email, sizeof(char)*strlen(email)) < 0) {
warnpe ("write");
}
if (fchown(destfd, uid, gid))
errorpe("chown: %s", dest);
close(destfd);
}
if (chown(homedir, uid, gid)) {
errorpe("failed to chown %s", homedir);
return -1;
}
umask(mask);
return 0;

View File

@ -2,4 +2,4 @@
#define CLUB_ACL "u::rwx,g::r-x,o::r-x,g:%d:rwx,m::rwx"
int ceo_create_home(char *homedir, char *skel, uid_t uid, gid_t gid, char *access_acl, char *default_acl);
int ceo_create_home(char *homedir, char *skel, uid_t uid, gid_t gid, char *access_acl, char *default_acl, char *email);

View File

@ -171,7 +171,7 @@ static int32_t addmember(Ceo__AddUser *in, Ceo__AddUserResponse *out) {
else
response_message(out, 0, "successfully created ldap group");
if ((home_stat = ceo_create_home(homedir, member_home_skel, id, id, NULL, NULL)))
if ((home_stat = ceo_create_home(homedir, member_home_skel, id, id, NULL, NULL, in->email)))
response_message(out, EHOME, "unable to create home directory for %s", in->username);
else
response_message(out, 0, "successfully created home directory");
@ -215,7 +215,7 @@ static int32_t addclub(Ceo__AddUser *in, Ceo__AddUserResponse *out) {
else
response_message(out, 0, "successfully created ldap sudoers");
if ((home_stat = ceo_create_home(homedir, club_home_skel, id, id, acl, acl)))
if ((home_stat = ceo_create_home(homedir, club_home_skel, id, id, acl, acl, NULL)))
response_message(out, EHOME, "unable to create home directory for %s", in->username);
else
response_message(out, 0, "successfully created home directory");