snmpd's normal socket is pretty much deprecated and the restricted
variant is even more useless. In other words lets pick it apart one
step at a time. This diff removes the restricted keyword and related
code.
While here I also removed the unimplemented IMSG_CTL_RELOAD logic.
For those wondering why I removed the CTL_CONN_LOCKED flag: It's only
checked in control_dispatch_imsg, so there's no point in setting it on
agentx sockets.
OK?
martijn@
Index: control.c
===================================================================
--- control.c (revision 1)
+++ control.c (working copy)
@@ -80,7 +80,7 @@
return (-1);
}
- if (cs->cs_restricted || cs->cs_agentx) {
+ if (cs->cs_agentx) {
old_umask = umask(S_IXUSR|S_IXGRP|S_IXOTH);
mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH;
} else {
@@ -174,7 +174,6 @@
log_warn("%s: agentx", __func__);
return;
}
- c->flags |= CTL_CONN_LOCKED;
c->iev.handler = control_dispatch_agentx;
TAILQ_INIT(&c->oids);
} else
@@ -249,21 +248,6 @@
if (n == 0)
break;
- if (cs->cs_restricted || (c->flags & CTL_CONN_LOCKED)) {
- switch (imsg.hdr.type) {
- case IMSG_SNMP_AGENTX:
- case IMSG_SNMP_ELEMENT:
- case IMSG_SNMP_END:
- case IMSG_SNMP_LOCK:
- break;
- default:
- control_close(c,
- "client requested restricted command",
- &imsg);
- return;
- }
- }
-
control_imsg_forward(&imsg);
switch (imsg.hdr.type) {
@@ -282,14 +266,6 @@
c->flags |= CTL_CONN_NOTIFY;
break;
- case IMSG_SNMP_LOCK:
- if (IMSG_DATA_SIZE(&imsg))
- return control_close(c, "invalid size", &imsg);
-
- /* enable restricted control mode */
- c->flags |= CTL_CONN_LOCKED;
- break;
-
case IMSG_SNMP_AGENTX:
if (IMSG_DATA_SIZE(&imsg))
return control_close(c, "invalid size", &imsg);
@@ -313,7 +289,6 @@
}
/* disable IMSG notifications */
c->flags &= ~CTL_CONN_NOTIFY;
- c->flags |= CTL_CONN_LOCKED;
c->iev.handler = control_dispatch_agentx;
break;
@@ -330,11 +305,7 @@
proc_forward_imsg(&env->sc_ps, &imsg, i, -1);
}
break;
- case IMSG_CTL_RELOAD:
- if (IMSG_DATA_SIZE(&imsg))
- return control_close(c, "invalid size", &imsg);
- proc_forward_imsg(&env->sc_ps, &imsg, PROC_PARENT, -1);
- break;
+
default:
control_close(c, "invalid type", &imsg);
return;
Index: parse.y
===================================================================
--- parse.y (revision 1)
+++ parse.y (working copy)
@@ -51,11 +51,6 @@
#include "snmpd.h"
#include "mib.h"
-enum socktype {
- SOCK_TYPE_RESTRICTED = 1,
- SOCK_TYPE_AGENTX = 2
-};
-
TAILQ_HEAD(files, file) files = TAILQ_HEAD_INITIALIZER(files);
static struct file {
TAILQ_ENTRY(file) entry;
@@ -133,7 +128,7 @@
%token SYSTEM CONTACT DESCR LOCATION NAME OBJECTID SERVICES RTFILTER
%token READONLY READWRITE OCTETSTRING INTEGER COMMUNITY TRAP RECEIVER
%token SECLEVEL NONE AUTH ENC USER AUTHKEY ENCKEY ERROR DISABLED
-%token SOCKET RESTRICTED AGENTX HANDLE DEFAULT SRCADDR TCP UDP PFADDRFILTER
+%token SOCKET AGENTX HANDLE DEFAULT SRCADDR TCP UDP PFADDRFILTER
%token <v.string> STRING
%token <v.number> NUMBER
%type <v.string> hostcmn
@@ -305,10 +300,7 @@
YYERROR;
}
rcsock->cs_name = $2;
- if ($3 == SOCK_TYPE_RESTRICTED)
- rcsock->cs_restricted = 1;
- else if ($3 == SOCK_TYPE_AGENTX)
- rcsock->cs_agentx = 1;
+ rcsock->cs_agentx = 1;
TAILQ_INSERT_TAIL(&conf->sc_ps.ps_rcsocks,
rcsock, cs_entry);
} else {
@@ -541,8 +533,7 @@
}
;
-socktype : RESTRICTED { $$ = SOCK_TYPE_RESTRICTED; }
- | AGENTX { $$ = SOCK_TYPE_AGENTX; }
+socktype : AGENTX { $$ = 1; }
| /* nothing */ { $$ = 0; }
;
@@ -655,7 +646,6 @@
{ "read-only", READONLY },
{ "read-write", READWRITE },
{ "receiver", RECEIVER },
- { "restricted", RESTRICTED },
{ "seclevel", SECLEVEL },
{ "services", SERVICES },
{ "socket", SOCKET },
Index: snmp.h
===================================================================
--- snmp.h (revision 1)
+++ snmp.h (working copy)
@@ -29,7 +29,6 @@
#define SNMP_MAX_OID_STRLEN 128 /* max size of the OID _string_ */
#define SNMP_SOCKET "/var/run/snmpd.sock"
#define AGENTX_SOCKET "/var/run/agentx.sock"
-#define SNMP_RESTRICTED_SOCKET "/var/run/snmpd.rsock"
enum snmp_type {
SNMP_IPADDR = 0,
@@ -51,9 +50,6 @@
enum snmp_imsg_ctl {
IMSG_SNMP_DUMMY = 1000, /* something that works everywhere */
- IMSG_SNMP_ELEMENT,
- IMSG_SNMP_END,
- IMSG_SNMP_LOCK, /* enable restricted mode */
IMSG_SNMP_AGENTX
};
Index: snmpd.c
===================================================================
--- snmpd.c (revision 1)
+++ snmpd.c (working copy)
@@ -300,8 +300,6 @@
snmpd_dispatch_snmpe(int fd, struct privsep_proc *p, struct imsg *imsg)
{
switch (imsg->hdr.type) {
- case IMSG_CTL_RELOAD:
- /* XXX notyet */
default:
break;
}
Index: snmpd.conf.5
===================================================================
--- snmpd.conf.5 (revision 1)
+++ snmpd.conf.5 (working copy)
@@ -133,23 +133,18 @@
.Xr snmpd 8
will accept only SNMPv3 requests since older versions neither support
authentication nor encryption.
-.It Ic socket Qo Ar path Qc Op Ic restricted | agentx
+.It Ic socket Qo Ar path Qc Op Ic agentx
Create a control socket at
.Ar path .
If
-.Ic restricted
-is specified, a restricted control socket will be created.
-If
.Ic agentx
is specified, a socket which speaks the AgentX protocol will be created.
Multiple
-.Ic restricted
-and
.Ic agentx
sockets may be created.
-By default
+By default only control socket
.Pa /var/run/snmpd.sock
-is created and no other sockets are created.
+is created.
.It Ic system contact Ar string
Specify the name or description of the system contact, typically a
name or an email address.
Index: snmpd.h
===================================================================
--- snmpd.h (revision 1)
+++ snmpd.h (working copy)
@@ -83,10 +83,8 @@
IMSG_NONE,
IMSG_CTL_OK, /* answer to snmpctl requests */
IMSG_CTL_FAIL,
- IMSG_CTL_END,
IMSG_CTL_NOTIFY,
IMSG_CTL_VERBOSE,
- IMSG_CTL_RELOAD,
IMSG_CTL_PROCFD,
IMSG_ALERT
};
@@ -113,7 +111,6 @@
struct event cs_ev;
struct event cs_evt;
int cs_fd;
- int cs_restricted;
int cs_agentx;
void *cs_env;
@@ -357,7 +354,6 @@
TAILQ_ENTRY(ctl_conn) entry;
u_int8_t flags;
#define CTL_CONN_NOTIFY 0x01
-#define CTL_CONN_LOCKED 0x02 /* restricted mode */
struct imsgev iev;
struct control_sock *cs;
struct agentx_handle *handle;