[srvx-commits] CVS: services/src opserv.help,1.39,1.40 opserv.c,1.237,1.238 nickserv.h,1.31,1.32 nic
Brought to you by:
entrope
|
From: Entrope <en...@us...> - 2002-07-02 01:25:06
|
Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv18618/src
Modified Files:
opserv.help opserv.c nickserv.h nickserv.c
Log Message:
make "?access oper level" give them that new level
Index: opserv.help
===================================================================
RCS file: /cvsroot/srvx/services/src/opserv.help,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -r1.39 -r1.40
*** opserv.help 2 Jul 2002 00:37:05 -0000 1.39
--- opserv.help 2 Jul 2002 01:25:02 -0000 1.40
***************
*** 28,33 ****
" WHOIS [${level/whois}]");
"ACCESS" ("$bACCESS$b",
! "/msg $O ACCESS [nick|*account]",
! "Displays the $O access level for the specified user or account. With no arguments, displays your own access level.");
"ADDALERT" ("$bADDALERT$b",
"/msg $O ADDALERT <name> <reaction> <criteria>",
--- 28,33 ----
" WHOIS [${level/whois}]");
"ACCESS" ("$bACCESS$b",
! "/msg $O ACCESS [nick|*account] [new-level]",
! "Displays the $O access level for the specified user or account. With no arguments, displays your own access level. With two arguments, sets the target's $O access level to the second argument (assuming you have sufficient access to do so).");
"ADDALERT" ("$bADDALERT$b",
"/msg $O ADDALERT <name> <reaction> <criteria>",
Index: opserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/opserv.c,v
retrieving revision 1.237
retrieving revision 1.238
diff -C2 -r1.237 -r1.238
*** opserv.c 27 Jun 2002 01:28:33 -0000 1.237
--- opserv.c 2 Jul 2002 01:25:02 -0000 1.238
***************
*** 108,111 ****
--- 108,112 ----
#define KEY_ISSUED "issued"
+ #define OSMSG_OPSERV_LEVEL_BAD "You may not promote another oper above your level."
#define OSMSG_USER_ACCESS_IS "$b%s$b (account $b%s$b) has %d access."
#define OSMSG_LEVEL_TOO_LOW "You lack sufficient access to use this command."
***************
*** 555,562 ****
--- 556,574 ----
struct handle_info *hi;
const char *target;
+ unsigned int new_level;
(void)channel;
target = (argc > 1) ? (const char*)argv[1] : user->nick;
if (!(hi = smart_get_handle_info(opserv, user, target))) return 0;
+ if ((argc > 2) && oper_can_set_access(user) && oper_outranks(user, hi)) {
+ new_level = strtoul(argv[2], NULL, 0);
+ if (user->handle_info->opserv_level < new_level) {
+ opserv_notice(user, OSMSG_OPSERV_LEVEL_BAD);
+ } else {
+ log(NS_LOG, LOG_INFO, "Account %s setting oper level for account %s to %d (from %d)\n",
+ user->handle_info->handle, hi->handle, new_level, hi->opserv_level);
+ hi->opserv_level = new_level;
+ }
+ }
opserv_notice(user, OSMSG_USER_ACCESS_IS, target, hi->handle, hi->opserv_level);
return 1;
Index: nickserv.h
===================================================================
RCS file: /cvsroot/srvx/services/src/nickserv.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -C2 -r1.31 -r1.32
*** nickserv.h 6 May 2002 23:33:12 -0000 1.31
--- nickserv.h 2 Jul 2002 01:25:02 -0000 1.32
***************
*** 108,111 ****
--- 108,113 ----
struct handle_info *get_handle_info(const char *handle);
struct handle_info *smart_get_handle_info(struct userNode *service, struct userNode *user, const unsigned char *name);
+ int oper_can_set_access(struct userNode *user);
+ int oper_outranks(struct userNode *user, struct handle_info *hi);
struct nick_info *get_nick_info(const char *nick);
struct modeNode *find_handle_in_channel(struct chanNode *channel, struct handle_info *handle, struct userNode *except);
Index: nickserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/nickserv.c,v
retrieving revision 1.172
retrieving revision 1.173
diff -C2 -r1.172 -r1.173
*** nickserv.c 2 Jul 2002 00:44:47 -0000 1.172
--- nickserv.c 2 Jul 2002 01:25:03 -0000 1.173
***************
*** 477,481 ****
is_valid_oper(struct userNode *user, unsigned int min_level, unsigned int quiet)
{
! if ((!IsHelping(user) && !IsOper(user)) || (min_level && !IsOper(user)) || !user->handle_info) {
if (!quiet) nickserv_notice(user, NSMSG_NO_ACCESS);
return 0;
--- 477,486 ----
is_valid_oper(struct userNode *user, unsigned int min_level, unsigned int quiet)
{
! if (!user->handle_info) {
! if (!quiet) nickserv_notice(user, MSG_AUTHENTICATE);
! return 0;
! }
!
! if (!IsOper(user) && (!IsHelping(user) || min_level)) {
if (!quiet) nickserv_notice(user, NSMSG_NO_ACCESS);
return 0;
***************
*** 589,597 ****
#define nickserv_get_handle_info(USER, NAME) smart_get_handle_info(nickserv, USER, NAME)
static struct handle_info *
get_victim_oper(struct userNode *user, const char *target)
{
struct handle_info *hi;
- int outranked;
if (!(hi = nickserv_get_handle_info(user, target))) return 0;
if (HANDLE_FLAGGED(user->handle_info, OPER_SUSPENDED)) {
--- 594,617 ----
#define nickserv_get_handle_info(USER, NAME) smart_get_handle_info(nickserv, USER, NAME)
+ int
+ oper_outranks(struct userNode *user, struct handle_info *hi) {
+ if (is_valid_oper(user, hi->opserv_level, 0)) return 1;
+ if (user->handle_info->opserv_level == hi->opserv_level) {
+ if ((user->handle_info->opserv_level == 1000)
+ || (user->handle_info == hi)
+ || ((user->handle_info->opserv_level == 0)
+ && !(HANDLE_FLAGGED(hi, SUPPORT_HELPER) || HANDLE_FLAGGED(hi, NETWORK_HELPER))
+ && HANDLE_FLAGGED(user->handle_info, HELPING))) {
+ return 1;
+ }
+ }
+ nickserv_notice(user, MSG_USER_OUTRANKED, hi->handle);
+ return 0;
+ }
+
static struct handle_info *
get_victim_oper(struct userNode *user, const char *target)
{
struct handle_info *hi;
if (!(hi = nickserv_get_handle_info(user, target))) return 0;
if (HANDLE_FLAGGED(user->handle_info, OPER_SUSPENDED)) {
***************
*** 599,618 ****
return 0;
}
! outranked = 1;
! if (hi->opserv_level < user->handle_info->opserv_level) outranked = 0;
! if (hi->opserv_level == user->handle_info->opserv_level) {
! if (user->handle_info->opserv_level == 1000) outranked = 0;
! if (user->handle_info == hi) outranked = 0;
! if ((hi->opserv_level == 0)
! && !(HANDLE_FLAGGED(hi, SUPPORT_HELPER) || HANDLE_FLAGGED(hi, NETWORK_HELPER))
! && HANDLE_FLAGGED(user->handle_info, HELPING)) {
! outranked = 0;
! }
! }
! if (outranked) {
! nickserv_notice(user, MSG_USER_OUTRANKED, hi->handle);
! return 0;
! }
! return hi;
}
--- 619,623 ----
return 0;
}
! return oper_outranks(user, hi) ? hi : NULL;
}
***************
*** 2009,2012 ****
--- 2014,2022 ----
}
+ int
+ oper_can_set_access(struct userNode *user) {
+ return is_valid_oper(user, nickserv_conf.modoper_level, 0);
+ }
+
static OPTION_FUNC(opt_level)
{
***************
*** 2017,2021 ****
if (argc > 1) {
! if (is_valid_oper(user, nickserv_conf.modoper_level, 0)) {
unsigned int new_level = strtoul(argv[1], NULL, 0);
if (user->handle_info->opserv_level < new_level) {
--- 2027,2031 ----
if (argc > 1) {
! if (oper_can_set_access(user)) {
unsigned int new_level = strtoul(argv[1], NULL, 0);
if (user->handle_info->opserv_level < new_level) {
|