static OPTION_FUNC(opt_devnull)
{
const char *devnull_name;
- int *devnull_id;
struct devnull_class *devnull_c;
if (argc > 1) {
devnull_name = unsplit_string(argv+1, argc-1, NULL);
devnull_c = devnull_find_name(devnull_name);
if(devnull_c)
- hi->devnull_id = devnull_c->devnull_id;
+ hi->devnull_id = devnull_c->id;
}
}
devnull_class_read(const char *name, void *data, UNUSED_ARG(void *extra))
{
struct record_data *rd = data;
- const char *nameb = name, *str;
+ const char *str;
unsigned long modes, maxchan, maxsendq;
unsigned int id, ii;
int devnull_user_has_priv(struct handle_info *hi, int devnull_priv) {
if(devnull_check_priv_func) {
- int ext_privs = ((struct devnull_class (*)(struct handle_info *))devnull_check_priv_func)(hi, devnull_priv);
- if((ext_privs & devnull_priv))
- return (ext_privs & devnull_priv);
+ struct devnull_class ext_class = ((struct devnull_class (*)(struct handle_info *))devnull_check_priv_func)(hi);
+ if((ext_class.modes & devnull_priv))
+ return (ext_class.modes & devnull_priv);
}
- if(!hi->devnull)
+ if(!hi->devnull_id)
return 0;
- struct devnull_class *th;
- if(!(th = dict_find(opserv_devnull_classes, hi->devnull, NULL)))
+ struct devnull_class *th = devnull_find_id(hi->devnull_id);
+ if(!th)
return 0;
-
return (th->modes & devnull_priv);
}
struct devnull_class devnull_user_get_class(struct handle_info *hi) {
struct devnull_class th;
- th.name = NULL;
- th.modes = 0;
+ memset(&th, 0, sizeof(th));
- if(hi->devnull) {
+ if(hi->devnull_id) {
struct devnull_class *thp;
- if((thp = dict_find(opserv_devnull_classes, hi->devnull, NULL))) {
+ if((thp = devnull_find_id(hi->devnull_id))) {
if(DEVNULL_HAS_PRIV(thp, CHANLIMIT) && (!DEVNULL_HAS_PRIV(&th, CHANLIMIT) || th.maxchan < thp->maxchan))
th.maxchan = thp->maxchan;
if(DEVNULL_HAS_PRIV(thp, MAXSENDQ) && (!DEVNULL_HAS_PRIV(&th, MAXSENDQ) || th.maxsendq < thp->maxsendq))
#define DEVNULL_MODES "abcdefghijklmno"
-#define DEVNULL_HAS_PRIV(cl, tok) ((cl)->modes & DEVNULL_##tok)
-#define DEVNULL_SET_PRIV(cl, tok) ((cl)->modes |= DEVNULL_##tok)
-#define DEVNULL_CLEAR_PRIV(cl, tok) ((cl)->modes &= ~DEVNULL_##tok)
+#define DEVNULL_HAS_PRIV(cl, tok) ((cl)->modes & DEVNULL_PRIV_##tok)
+#define DEVNULL_SET_PRIV(cl, tok) ((cl)->modes |= DEVNULL_PRIV_##tok)
+#define DEVNULL_CLEAR_PRIV(cl, tok) ((cl)->modes &= ~DEVNULL_PRIV_##tok)
struct devnull_class {
unsigned int id;
int devnull_user_has_priv(struct handle_info *hi, int devnull_priv);
struct devnull_class devnull_user_get_class(struct handle_info *hi);
struct devnull_class *devnull_find_id(unsigned int id);
-struct devnull_class *devnull_find_name(char *name);
+struct devnull_class *devnull_find_name(const char *name);
struct userNode* GetOpServ(void);
void operpart(struct chanNode *chan, struct userNode *user);
void operadd(struct userNode *user);