]>
jfr.im git - irc/quakenet/newserv.git/blob - control/control_policy.c
2 #include "control_db.h"
3 #include "control_policy.h"
6 int noperserv_policy_command_permitted(flag_t level
, nick
*user
) {
8 if(level
== __NO_ANYONE
)
10 if((level
& __NO_OPERED
) && !IsOper(user
))
12 if(level
& __NO_AUTHED
) {
15 if(level
& __NO_ACCOUNT
) {
16 if(!(au
= NOGetAuthedUser(user
)))
18 if((level
& __NO_DEVELOPER
) && !NOIsDeveloper(au
)) {
20 } else if((level
& __NO_OPER
) && !NOIsLeastOper(au
)) {
22 } else if((level
& __NO_STAFF
) && !NOIsLeastStaff(au
)) {
25 if ((level
& __NO_SEC
) && !NOIsLeastSec(au
))
27 if ((level
& __NO_TRUST
) && !NOIsLeastTrust(au
))
29 if ((level
& __NO_RELAY
) && !NOIsLeastRelay(au
))
37 /* return userflags permitted for each level */
38 flag_t
noperserv_policy_permitted_noticeflags(no_autheduser
*target
) {
39 flag_t result
= NL_PEONIC_FLAGS
;
40 if(NOIsDeveloper(target
))
41 result
|= NL_DEV_FLAGS
;
42 if(NOIsLeastOper(target
))
43 result
|= NL_OPER_FLAGS
;
44 if(NOIsLeastSec(target
))
45 result
|= NL_SEC_FLAGS
;
46 if(NOIsLeastTrust(target
))
47 result
|= NL_TRUST_FLAGS
;
53 /* updates target's noticeflags according to their new userflags, unsetting unpermitted and setting new permitted flags */
54 void noperserv_policy_update_noticeflags(flag_t fwas
, no_autheduser
*target
) {
55 flag_t newflags
= NOGetNoticeLevel(target
);
57 newflags
&= noperserv_policy_permitted_noticeflags(target
); /* unset flags we're not supposed to have */
59 /* and add flags we're allowed */
60 if(!(fwas
& __NO_OPER
) && NOIsLeastOper(target
))
61 newflags
|= NL_OPER_FLAGS
;
62 if(!(fwas
& __NO_SEC
) && NOIsLeastSec(target
))
63 newflags
|= NL_SEC_FLAGS
;
64 if(!(fwas
& __NO_TRUST
) && NOIsLeastTrust(target
))
65 newflags
|= NL_TRUST_FLAGS
;
66 if(!(fwas
& __NO_DEVELOPER
) && NOIsDeveloper(target
))
67 newflags
|= NL_DEV_FLAGS
;
69 target
->noticelevel
= newflags
;
72 /* is au allowed to modified targets flags */
73 flag_t
noperserv_policy_permitted_modifications(no_autheduser
*au
, no_autheduser
*target
) {
77 if(NOIsLeastOper(au
)) {
78 permitted
|= NO_OPER_FLAGS
;
79 if(target
== au
) /* let opers remove their own oper flag */
80 permitted
|= __NO_OPER
;
84 permitted
|= __NO_SEC
;
85 if(NOIsLeastTrust(au
))
86 permitted
|= __NO_TRUST
;
90 permitted
|= NO_DEV_FLAGS
;
92 if((target
!= au
) && NOIsLeastOper(target
) && !NOIsDeveloper(au
))