Changeset 1692
- Timestamp:
- 03/10/10 16:49:06 (6 months ago)
- Location:
- trunk
- Files:
-
- 7 modified
-
include/dbm.h (modified) (1 diff)
-
include/nickname.h (modified) (1 diff)
-
languages/nickserv.en.lang (modified) (2 diffs)
-
modules/nickserv.c (modified) (4 diffs)
-
modules/pgsql.c (modified) (1 diff)
-
sql/nickserv-pgsql.sql (modified) (1 diff)
-
src/nickname.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/dbm.h
r1680 r1692 204 204 GET_GROUPS, 205 205 GET_GROUP_CHAN_INFO, 206 GET_AJOINS, 207 INSERT_AJOIN, 208 DELETE_AJOIN, 206 209 QUERY_COUNT 207 210 }; -
trunk/include/nickname.h
r1554 r1692 113 113 void nickname_list_admins_free(dlink_list *); 114 114 115 int nickname_ajoin_add(int, int); 116 int nickname_ajoin_list(int, dlink_list *); 117 int nickname_ajoin_del(int, int); 118 void nickname_ajoinlist_free(dlink_list *); 119 115 120 Nickname *nickname_new(); 116 121 inline void nickname_free(Nickname *); -
trunk/languages/nickserv.en.lang
r1582 r1692 153 153 CERT DEL 994EB294C15F4EE647FB5A426C11444E697B1814 154 154 155 NS_HELP_AJOIN_SHORT 156 %s: Maintains the nickname auto join list. 157 NS_HELP_AJOIN_LONG 158 Usage: AJOIN ADD #channel 159 AJOIN DEL #channel 160 AJOIN LIST 161 162 Maintains the nickname auto join list. Channels in this list will be 163 automatically joined by your client every time you identify with services. 164 Channels must be registered with channel services to be able to be added to 165 the list. 166 167 Examples: 168 AJOIN ADD #test 169 AJOIN DEL #test 170 AJOIN LIST 171 172 The following are valid options to this command: 173 NS_HELP_AJOIN_ADD_SHORT 174 %s 175 NS_HELP_AJOIN_ADD_LONG 176 Usage: AJOIN ADD #channel 177 178 Add a channel to the auto join list. The channel must be registered with 179 channel services but does not necessarily need to currently exist on the 180 network. 181 182 Examples: 183 AJOIN ADD #test 184 NS_HELP_AJOIN_LIST_SHORT 185 %s 186 NS_HELP_AJOIN_LIST_LONG 187 Usage: AJOIN LIST 188 189 List entries in your auto join list. 190 191 Example: 192 AJOIN LIST 193 NS_HELP_AJOIN_DEL_SHORT 194 %s 195 NS_HELP_AJOIN_DEL_LONG 196 Usage: AJOIN DEL #channel 197 198 Delete an entry from your auto join list. 199 200 Examples: 201 AJOIN DEL #test 155 202 NS_HELP_SET_SHORT 156 203 %s: Set nickname properties. … … 504 551 again. If this is not the first time you have seen this message please 505 552 contact network support. 553 NS_AJOIN_INVALID_CHAN 554 Channel name %s is invalid. Channel names must begin with '#'. 555 NS_AJOIN_CHAN_NOT_REG 556 Channel %s is not registered with channel services. Unable to add 557 auto join entries for channels that are not registered. 558 NS_AJOIN_ADD 559 AJOIN entry %s has been added. 560 NS_AJOIN_ADDFAIL 561 AJOIN entry %s failed to be added. This may have been an internal error, 562 please try again shortly. If this is not the first time you have seen this 563 message please contact network support. 564 NS_AJOIN_START 565 AJOIN list: 566 NS_AJOIN_ENTRY 567 %d %s 568 NS_AJOIN_LIST_NONE 569 Your AJOIN list is empty and contains no entry. 570 NS_AJOIN_DEL 571 AJOIN entry %s deleted. 572 NS_AJOIN_DEL_NONE 573 %s was not found on the AJOIN list. 574 NS_AJOIN_DEL_ERROR 575 An error occured attempting to delete the AJOIN entry. Please try again. 576 If this is not the first time you have seen this message please contact 577 network support. 506 578 NS_CERT_ADD 507 579 CERT list entry %s added to nickname %s. -
trunk/modules/nickserv.c
r1686 r1692 105 105 static void m_cert_del(struct Service *, struct Client *, int, char *[]); 106 106 107 static void m_ajoin_add(struct Service *, struct Client *, int, char *[]); 108 static void m_ajoin_list(struct Service *, struct Client *, int, char *[]); 109 static void m_ajoin_del(struct Service *, struct Client *, int, char *[]); 110 107 111 static int m_set_flag(struct Service *, struct Client *, char *, char *, 108 112 unsigned char (*)(Nickname *), int (*)(Nickname *, unsigned char)); … … 188 192 }; 189 193 194 static struct ServiceMessage ajoin_sub[] = { 195 { NULL, "ADD", 0, 0, 2, 0, IDENTIFIED_FLAG, NS_HELP_AJOIN_ADD_SHORT, 196 NS_HELP_AJOIN_ADD_LONG, m_ajoin_add }, 197 { NULL, "LIST", 0, 0, 0, 0, IDENTIFIED_FLAG, NS_HELP_AJOIN_LIST_SHORT, 198 NS_HELP_AJOIN_LIST_LONG, m_ajoin_list }, 199 { NULL, "DEL", 0, 1, 1, 0, IDENTIFIED_FLAG, NS_HELP_AJOIN_DEL_SHORT, 200 NS_HELP_AJOIN_DEL_LONG, m_ajoin_del }, 201 { NULL, NULL, 0, 0, 0, 0, 0, 0, 0, NULL } 202 }; 203 204 static struct ServiceMessage ajoin_msgtab = { 205 cert_sub, "AJOIN", 0, 1, 1, 0, IDENTIFIED_FLAG, NS_HELP_AJOIN_SHORT, 206 NS_HELP_AJOIN_LONG, NULL 207 }; 208 190 209 static struct ServiceMessage access_sub[] = { 191 210 { NULL, "ADD", 0, 1, 1, 0, IDENTIFIED_FLAG, NS_HELP_ACCESS_ADD_SHORT, … … 284 303 mod_add_servcmd(&nickserv->msg_tree, &access_msgtab); 285 304 mod_add_servcmd(&nickserv->msg_tree, &cert_msgtab); 305 mod_add_servcmd(&nickserv->msg_tree, &ajoin_msgtab); 286 306 mod_add_servcmd(&nickserv->msg_tree, &ghost_msgtab); 287 307 mod_add_servcmd(&nickserv->msg_tree, &link_msgtab); … … 1128 1148 1129 1149 static void 1150 m_ajoin_add(struct Service *service, struct Client *client, int parc, 1151 char *parv[]) 1152 { 1153 Nickname *nick = client->nickname; 1154 DBChannel *chan; 1155 1156 if(*parv[1] != '#') 1157 { 1158 reply_user(service, service, client, NS_AJOIN_INVALID_CHAN, parv[1]); 1159 return; 1160 } 1161 1162 chan = dbchannel_find(parv[1]); 1163 if(chan == NULL) 1164 { 1165 reply_user(service, service, client, NS_AJOIN_CHAN_NOT_REG, parv[1]); 1166 return; 1167 } 1168 1169 if(nickname_ajoin_add(nickname_get_id(nick), dbchannel_get_id(chan))) 1170 reply_user(service, service, client, NS_AJOIN_ADD, parv[1]); 1171 else 1172 reply_user(service, service, client, NS_AJOIN_ADDFAIL, parv[1]); 1173 1174 db_channel_free(chan); 1175 } 1176 1177 static void 1178 m_ajoin_list(struct Service *service, struct Client *client, int parc, 1179 char *parv[]) 1180 { 1181 Nickname *nick; 1182 dlink_list list = { 0 }; 1183 dlink_node *ptr; 1184 int i = 1; 1185 1186 nick = client->nickname; 1187 1188 nickname_ajoin_list(nick->id, &list); 1189 1190 if(dlink_list_length(&list) == 0) 1191 reply_user(service, service, client, NS_AJOIN_LIST_NONE); 1192 else 1193 reply_user(service, service, client, NS_AJOIN_START); 1194 1195 DLINK_FOREACH(ptr, list.head) 1196 { 1197 char *ajoin; 1198 ajoin = ptr->data; 1199 reply_user(service, service, client, NS_AJOIN_ENTRY, i++, ajoin); 1200 } 1201 1202 nickname_ajoinlist_free(&list); 1203 } 1204 1205 static void 1206 m_ajoin_del(struct Service *service, struct Client *client, int parc, 1207 char *parv[]) 1208 { 1209 Nickname *nick = client->nickname; 1210 DBChannel *chan; 1211 int ret; 1212 1213 chan = dbchannel_find(parv[1]); 1214 if(chan == NULL) 1215 { 1216 reply_user(service, service, client, NS_AJOIN_CHAN_NOT_REG, parv[1]); 1217 return; 1218 } 1219 1220 ret = nickname_ajoin_delete(nick->id, chan->id); 1221 1222 if(ret > 0) 1223 reply_user(service, service, client, NS_AJOIN_DEL, parv[1]); 1224 else if(ret == 0) 1225 reply_user(service, service, client, NS_AJOIN_DEL_NONE, parv[1]); 1226 else 1227 reply_user(service, service, client, NS_AJOIN_DEL_ERROR); 1228 } 1229 1230 static void 1130 1231 m_regain(struct Service *service, struct Client *client, int parc, char *parv[]) 1131 1232 { -
trunk/modules/pgsql.c
r1680 r1692 321 321 "channel.id=channel_access.channel_id AND channel_access.group_id=$1 " 322 322 "ORDER BY lower(channel.channel)", QUERY }, 323 { GET_AJOINS, "SELECT channel.channel FROM account_autojoin " 324 "JOIN channel ON channel.id=account_autojoin.id WHERE account_autojoin.account_id=$1", 325 QUERY }, 326 { INSERT_AJOIN, "INSERT INTO account_autojoin (account_id, channel_id) VALUES " 327 "($1, $2)", EXECUTE }, 328 { DELETE_AJOIN, "DELETE FROM account_autojoin WHERE account_id=$1 AND channel_id=$2", 329 EXECUTE }, 323 330 }; 324 331 -
trunk/sql/nickserv-pgsql.sql
r1608 r1692 70 70 CREATE TABLE account_autojoin ( 71 71 id SERIAL PRIMARY KEY, 72 account_id INTEGER REFERENCES account(id) ON DELETE CASCADE NOT NULL, 72 73 channel_id INTEGER REFERENCES channel(id) ON DELETE CASCADE NOT NULL 73 74 ); -
trunk/src/nickname.c
r1643 r1692 739 739 740 740 int 741 nickname_ajoin_add(int account_id, int channel_id) 742 { 743 int ret = db_execute_nonquery(INSERT_AJOIN, "ii", account_id, channel_id); 744 745 if(ret == -1) 746 return FALSE; 747 748 return TRUE; 749 } 750 751 int 752 nickname_ajoin_delete(int account_id, int channel_id) 753 { 754 return db_execute_nonquery(DELETE_AJOIN, "ii", account_id, channel_id); 755 } 756 757 int 758 nickname_ajoin_list(int account_id, dlink_list *list) 759 { 760 result_set_t *results; 761 int error, i; 762 763 results = db_execute(GET_AJOINS, &error, "i", account_id); 764 if(results == NULL && error != 0) 765 { 766 ilog(L_CRIT, "nickname_ajoin_list: database error %d", error); 767 return -1; 768 } 769 else if(results == NULL) 770 return -1; 771 772 for(i = 0; i < results->row_count; i++) 773 { 774 row_t *row = &results->rows[i]; 775 char *entry = row->cols[0]; 776 777 dlinkAdd(entry, make_dlink_node(), list); 778 } 779 780 db_free_result(results); 781 782 return dlink_list_length(list); 783 } 784 785 void 786 nickname_ajoinlist_free(dlink_list *list) 787 { 788 dlink_node *ptr, *next; 789 char *entry; 790 791 ilog(L_DEBUG, "Freeing nickname ajoin list %p of length %lu", list, 792 dlink_list_length(list)); 793 794 DLINK_FOREACH_SAFE(ptr, next, list->head) 795 { 796 entry = (char*)ptr->data; 797 MyFree(entry); 798 dlinkDelete(ptr, list); 799 free_dlink_node(ptr); 800 } 801 } 802 803 int 741 804 nickname_cert_list(Nickname *nick, dlink_list *list) 742 805 {
