*** /usr/local/src/mu-conference-0.6.0/include/conference.h Sat Nov 15 06:19:43 2003 --- include/conference.h Fri Oct 1 09:52:34 2004 *************** *** 62,67 **** --- 62,68 ---- #define TERROR_MUC_FULL (terror){408, "Room is full."} #define TERROR_MUC_NICK (terror){409, "Please choose a different nickname."} #define TERROR_MUC_NICKREG (terror){409, "Reserved Nick - Please choose a different nickname."} + #define TERROR_MUC_NICKLOCKED (terror){409, "Nicknames locked: please use your username instead."} #define SEND_ALL 0 #define SEND_LEGACY 1 *************** *** 101,106 **** --- 102,108 ---- int loader; /* Used to delay loading from xdb */ int roomlock; /* Stop dynamic room creation */ int dynamic; /* Only allows dynamic rooms to be created */ + int locknicks; /* All rooms have locked nicknames */ int shutdown; /* Service shutting down */ #ifndef _JCOMP pth_mutex_t lock; /* Used for hasGHashTable *locking */ *************** *** 136,141 **** --- 138,144 ---- int public; /* Is this room publicly searchable */ int subjectlock; /* Is changing subject locked to admins? */ int maxusers; /* Maximum allowed users, 0 = unlimited */ + int locknicks; /* Nicknames locked to JID usernames */ int persistent; /* Will this room avoid autocleanup */ int moderated; /* Is this room moderated */ int defaulttype; /* Do users default to members in moderated rooms? */ *** /usr/local/src/mu-conference-0.6.0/src/conference.c Sat Nov 15 06:19:44 2003 --- src/conference.c Fri Oct 1 16:52:11 2004 *************** *** 532,537 **** --- 532,548 ---- return; } + /* Don't allow user if locknicks is set and resource <> JID user */ + if ( (master->locknicks || room->locknicks) && (j_strcmp(jp->to->resource, jp->from->user) != 0) ) { + log_debug(NAME, "[%s] Nicknames locked - Requested nick %s doesn't match required username %s", + FZONE, jp->to->resource, jp->from->user); + + /* Send a nickname refused error message */ + jutil_error(jp->x, TERROR_MUC_NICKLOCKED); + deliver(dpacket_new(jp->x),NULL); + return; + } + /* User already exists, return conflict Error */ if(u2 != NULL) { *************** *** 1172,1177 **** --- 1183,1194 ---- /* If requested, stop any new rooms being created */ if(xmlnode_get_tag(cfg,"persistent")) master->dynamic = -1; + + /* If requested, make room nicknames locked by default */ + if(xmlnode_get_tag(cfg,"locknicks")) + master->locknicks = 1; + else + master->locknicks = 0; master->sadmin = g_hash_table_new_full(g_str_hash,g_str_equal, ght_remove_key, ght_remove_xmlnode); *** /usr/local/src/mu-conference-0.6.0/src/conference_room.c Sat Nov 15 06:19:45 2003 --- src/conference_room.c Fri Oct 1 16:54:49 2004 *************** *** 1246,1251 **** --- 1246,1254 ---- room->secret = j_strdup(secret); room->private = private; + /* lock nicknames - defaults to off (unless overridden by master setting) */ + room->locknicks = 0; + /* Initialise room history */ room->history = pmalloco(p, sizeof(xmlnode) * master->history); /* make array of xmlnodes */ log_debug(NAME, "[%s] Malloc: history = %d", FZONE, sizeof(xmlnode) * master->history); *** /usr/local/src/mu-conference-0.6.0/src/xdata.c Sat Nov 15 06:19:45 2003 --- src/xdata.c Fri Oct 1 16:55:50 2004 *************** *** 194,199 **** --- 194,204 ---- room->moderated = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=muc#owner_moderatedroom"),"value"),room->moderated); room->defaulttype = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=defaulttype"),"value"),room->defaulttype); room->privmsg = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=privmsg"),"value"),room->privmsg); + + /* Nicknames locked ? Allow owner to choose if master->locknicks != 0 */ + if (!room->master->locknicks) + room->locknicks = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=locknicks"),"value"),room->locknicks); + room->invitation = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=muc#owner_inviteonly"),"value"),room->invitation); room->invites = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=muc#owner_allowinvites"),"value"),room->invites); room->legacy = j_atoi(xmlnode_get_tag_data(xmlnode_get_tag(results,"?var=legacy"),"value"),room->legacy); *************** *** 460,465 **** --- 465,473 ---- element = xmlnode_insert_tag(field, "option"); xmlnode_put_attrib(element, "label", "None"); xmlnode_insert_cdata(xmlnode_insert_tag(element, "value"), "0", -1); + + if (!room->master->locknicks) + xmlnode_insert_node(x,add_xdata_boolean("Lock nicknames to JID usernames?", "locknicks", room->locknicks)); xmlnode_insert_node(x,add_xdata_boolean("Allow Occupants to query other Occupants?", "privacy", room->private)); xmlnode_insert_node(x,add_xdata_boolean("Allow Public Searching for Room", "muc#owner_publicroom", room->public)); *** /usr/local/src/mu-conference-0.6.0/src/xdb.c Sat Nov 15 06:19:46 2003 --- src/xdb.c Fri Oct 1 09:39:52 2004 *************** *** 71,76 **** --- 71,78 ---- xmlnode_insert_cdata(xmlnode_insert_tag(node, "visible"), itoa(room->visible, temp), -1); xmlnode_insert_cdata(xmlnode_insert_tag(node, "logformat"), itoa(room->logformat, temp), -1); + xmlnode_insert_cdata(xmlnode_insert_tag(node, "locknicks"), itoa(room->locknicks, temp), -1); + if(room->logfile) xmlnode_insert_cdata(xmlnode_insert_tag(node, "logging"), "1", -1); else *************** *** 368,373 **** --- 370,376 ---- room->privmsg = j_atoi(xmlnode_get_tag_data(result, "privmsg"), 0); room->invitation = j_atoi(xmlnode_get_tag_data(result, "invitation"), 0); room->invites = j_atoi(xmlnode_get_tag_data(result, "invites"), 0); + room->locknicks = j_atoi(xmlnode_get_tag_data(result, "locknicks"), 0); room->legacy = j_atoi(xmlnode_get_tag_data(result, "legacy"), 1); room->public = j_atoi(xmlnode_get_tag_data(result, "public"), room->master->public); room->visible = j_atoi(xmlnode_get_tag_data(result, "visible"), 0);