]>
jfr.im git - irc/quakenet/newserv.git/blob - noperserv/noperserv_policy.c
1 #include "../control/control.h"
3 #include "noperserv_db.h"
4 #include "noperserv_policy.h"
7 int noperserv_policy_command_permitted(flag_t level
, nick
*user
) {
9 if(level
== __NO_ANYONE
)
11 if((level
& __NO_OPERED
) && !IsOper(user
))
13 if(level
& __NO_AUTHED
) {
16 if(level
& __NO_ACCOUNT
) {
17 if(!(au
= NOGetAuthedUser(user
)))
19 if((level
& __NO_DEVELOPER
) && !NOIsDeveloper(au
)) {
21 } else if((level
& __NO_OPER
) && !NOIsLeastOper(au
)) {
23 } else if((level
& __NO_STAFF
) && !NOIsLeastStaff(au
)) {
26 if ((level
& __NO_SEC
) && !NOIsLeastSec(au
))
28 if ((level
& __NO_TRUST
) && !NOIsLeastTrust(au
))
30 if ((level
& __NO_RELAY
) && !NOIsLeastRelay(au
))
38 /* return userflags permitted for each level */
39 flag_t
noperserv_policy_permitted_noticeflags(no_autheduser
*target
) {
40 flag_t result
= NL_PEONIC_FLAGS
;
41 if(NOIsDeveloper(target
))
42 result
|= NL_DEV_FLAGS
;
43 if(NOIsLeastOper(target
))
44 result
|= NL_OPER_FLAGS
;
45 if(NOIsLeastSec(target
))
46 result
|= NL_SEC_FLAGS
;
47 if(NOIsLeastTrust(target
))
48 result
|= NL_TRUST_FLAGS
;
54 /* updates target's noticeflags according to their new userflags, unsetting unpermitted and setting new permitted flags */
55 void noperserv_policy_update_noticeflags(flag_t fwas
, no_autheduser
*target
) {
56 flag_t newflags
= NOGetNoticeLevel(target
);
58 newflags
&= noperserv_policy_permitted_noticeflags(target
); /* unset flags we're not supposed to have */
60 /* and add flags we're allowed */
61 if(!(fwas
& __NO_OPER
) && NOIsLeastOper(target
))
62 newflags
|= NL_OPER_FLAGS
;
63 if(!(fwas
& __NO_SEC
) && NOIsLeastSec(target
))
64 newflags
|= NL_SEC_FLAGS
;
65 if(!(fwas
& __NO_TRUST
) && NOIsLeastTrust(target
))
66 newflags
|= NL_TRUST_FLAGS
;
67 if(!(fwas
& __NO_DEVELOPER
) && NOIsDeveloper(target
))
68 newflags
|= NL_DEV_FLAGS
;
70 target
->noticelevel
= newflags
;
73 /* is au allowed to modified targets flags */
74 flag_t
noperserv_policy_permitted_modifications(no_autheduser
*au
, no_autheduser
*target
) {
78 if(NOIsLeastOper(au
)) {
79 permitted
|= NO_OPER_FLAGS
;
80 if(target
== au
) /* let opers remove their own oper flag */
81 permitted
|= __NO_OPER
;
85 permitted
|= __NO_SEC
;
86 if(NOIsLeastTrust(au
))
87 permitted
|= __NO_TRUST
;
91 permitted
|= NO_DEV_FLAGS
;
93 if((target
!= au
) && NOIsLeastOper(target
) && !NOIsDeveloper(au
))