agent__read__config_8c-source.html from net-snmp at Krugle
Show agent__read__config_8c-source.html syntax highlighted
<!--#set var="section" value="development" -->
<!--#include virtual="/page-top.html" -->
<!-- CONTENT START -->
<!-- Generated by Doxygen 1.3.9.1 -->
<div class="qindex">
<a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class=
"qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class=
"qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="pages.html">Related Pages</a> | <a class=
"qindex" href="examples.html">Examples</a>
</div>
<div class="nav">
<a class="el" href="dir_000003.html">agent</a>
</div>
<h1>agent_read_config.c</h1>
<div class="fragment">
<pre class="fragment">
00001 <span class="comment">/*</span>
00002 <span class="comment"> * agent_read_config.c</span>
00003 <span class="comment"> */</span>
00004
00005 <span class="preprocessor">#include <net-snmp/net-snmp-config.h></span>
00006
00007 <span class="preprocessor">#include <sys/types.h></span>
00008 <span class="preprocessor">#if HAVE_STDLIB_H</span>
00009 <span class="preprocessor">#include <stdlib.h></span>
00010 <span class="preprocessor">#endif</span>
00011 <span class="preprocessor">#if HAVE_STRING_H</span>
00012 <span class="preprocessor">#include <string.h></span>
00013 <span class="preprocessor">#else</span>
00014 <span class="preprocessor">#include <strings.h></span>
00015 <span class="preprocessor">#endif</span>
00016 <span class="preprocessor">#include <stdio.h></span>
00017 <span class="preprocessor">#include <ctype.h></span>
00018 <span class="preprocessor">#include <errno.h></span>
00019
00020 <span class="preprocessor">#if TIME_WITH_SYS_TIME</span>
00021 <span class="preprocessor"># ifdef WIN32</span>
00022 <span class="preprocessor"># include <sys/timeb.h></span>
00023 <span class="preprocessor"># else</span>
00024 <span class="preprocessor"># include <sys/time.h></span>
00025 <span class="preprocessor"># endif</span>
00026 <span class="preprocessor"># include <time.h></span>
00027 <span class="preprocessor">#else</span>
00028 <span class="preprocessor"># if HAVE_SYS_TIME_H</span>
00029 <span class="preprocessor"># include <sys/time.h></span>
00030 <span class="preprocessor"># else</span>
00031 <span class="preprocessor"># include <time.h></span>
00032 <span class="preprocessor"># endif</span>
00033 <span class="preprocessor">#endif</span>
00034 <span class="preprocessor">#if HAVE_NETINET_IN_H</span>
00035 <span class="preprocessor">#include <netinet/in.h></span>
00036 <span class="preprocessor">#endif</span>
00037 <span class="preprocessor">#if HAVE_NETINET_IN_SYSTM_H</span>
00038 <span class="preprocessor">#include <netinet/in_systm.h></span>
00039 <span class="preprocessor">#endif</span>
00040 <span class="preprocessor">#if HAVE_NETINET_IP_H</span>
00041 <span class="preprocessor">#include <netinet/ip.h></span>
00042 <span class="preprocessor">#endif</span>
00043 <span class="preprocessor">#ifdef INET6</span>
00044 <span class="preprocessor">#if HAVE_NETINET_IP6_H</span>
00045 <span class="preprocessor">#include <netinet/ip6.h></span>
00046 <span class="preprocessor">#endif</span>
00047 <span class="preprocessor">#endif</span>
00048 <span class="preprocessor">#if HAVE_SYS_QUEUE_H</span>
00049 <span class="preprocessor">#include <sys/queue.h></span>
00050 <span class="preprocessor">#endif</span>
00051 <span class="preprocessor">#if HAVE_SYS_SOCKET_H</span>
00052 <span class="preprocessor">#include <sys/socket.h></span>
00053 <span class="preprocessor">#if HAVE_SYS_SOCKETVAR_H</span>
00054 <span class="preprocessor">#ifndef dynix</span>
00055 <span class="preprocessor">#include <sys/socketvar.h></span>
00056 <span class="preprocessor">#else</span>
00057 <span class="preprocessor">#include <sys/param.h></span>
00058 <span class="preprocessor">#endif</span>
00059 <span class="preprocessor">#endif</span>
00060 <span class="preprocessor">#elif HAVE_WINSOCK_H</span>
00061 <span class="preprocessor">#include <winsock.h></span>
00062 <span class="preprocessor">#endif</span>
00063 <span class="preprocessor">#if HAVE_SYS_STREAM_H</span>
00064 <span class="preprocessor"># ifdef sysv5UnixWare7</span>
00065 <span class="preprocessor"># define _KMEMUSER 1 </span><span class=
"comment">/* <sys/stream.h> needs this for queue_t */</span>
00066 <span class="preprocessor"># endif</span>
00067 <span class="preprocessor">#include <sys/stream.h></span>
00068 <span class="preprocessor">#endif</span>
00069 <span class="preprocessor">#if HAVE_NET_ROUTE_H</span>
00070 <span class="preprocessor">#include <net/route.h></span>
00071 <span class="preprocessor">#endif</span>
00072 <span class="preprocessor">#if HAVE_NETINET_IP_VAR_H</span>
00073 <span class="preprocessor">#include <netinet/ip_var.h></span>
00074 <span class="preprocessor">#endif</span>
00075 <span class="preprocessor">#ifdef INET6</span>
00076 <span class="preprocessor">#if HAVE_NETINET6_IP6_VAR_H</span>
00077 <span class="preprocessor">#include <netinet6/ip6_var.h></span>
00078 <span class="preprocessor">#endif</span>
00079 <span class="preprocessor">#endif</span>
00080 <span class="preprocessor">#if HAVE_NETINET_IN_PCB_H</span>
00081 <span class="preprocessor">#include <netinet/in_pcb.h></span>
00082 <span class="preprocessor">#endif</span>
00083 <span class="preprocessor">#if HAVE_INET_MIB2_H</span>
00084 <span class="preprocessor">#include <inet/mib2.h></span>
00085 <span class="preprocessor">#endif</span>
00086
00087 <span class="preprocessor">#if HAVE_UNISTD_H</span>
00088 <span class="preprocessor">#include <unistd.h></span>
00089 <span class="preprocessor">#endif</span>
00090 <span class="preprocessor">#ifdef HAVE_PWD_H</span>
00091 <span class="preprocessor">#include <pwd.h></span>
00092 <span class="preprocessor">#endif</span>
00093 <span class="preprocessor">#ifdef HAVE_GRP_H</span>
00094 <span class="preprocessor">#include <grp.h></span>
00095 <span class="preprocessor">#endif</span>
00096
00097 <span class="preprocessor">#include <net-snmp/net-snmp-includes.h></span>
00098 <span class="preprocessor">#include <net-snmp/agent/net-snmp-agent-includes.h></span>
00099
00100 <span class="preprocessor">#include "mibgroup/struct.h"</span>
00101 <span class="preprocessor">#include <net-snmp/agent/agent_trap.h></span>
00102 <span class="preprocessor">#include "snmpd.h"</span>
00103 <span class="preprocessor">#include <net-snmp/agent/agent_callbacks.h></span>
00104 <span class="preprocessor">#include <net-snmp/agent/table.h></span>
00105 <span class="preprocessor">#include <net-snmp/agent/table_iterator.h></span>
00106 <span class="preprocessor">#include <net-snmp/agent/table_data.h></span>
00107 <span class="preprocessor">#include <net-snmp/agent/table_dataset.h></span>
00108 <span class="preprocessor">#include "agent_module_includes.h"</span>
00109 <span class="preprocessor">#include "mib_module_includes.h"</span>
00110
00111 <span class="keywordtype">char</span> dontReadConfigFiles;
00112 <span class="keywordtype">char</span> *optconfigfile;
00113
00114 <span class="preprocessor">#ifdef HAVE_UNISTD_H</span>
00115 <span class="keywordtype">void</span>
00116 snmpd_set_agent_user(<span class="keyword">const</span> <span class="keywordtype">char</span> *token, <span class=
"keywordtype">char</span> *cptr)
00117 {
00118 <span class="preprocessor">#if defined(HAVE_GETPWNAM) && defined(HAVE_PWD_H)</span>
00119 <span class="keyword">struct </span>passwd *info;
00120 <span class="preprocessor">#endif</span>
00121
00122 <span class="keywordflow">if</span> (cptr[0] == <span class="charliteral">'#'</span>) {
00123 <span class="keywordtype">char</span> *ecp;
00124 <span class="keywordtype">int</span> uid;
00125 uid = strtoul(cptr + 1, &ecp, 10);
00126 <span class="keywordflow">if</span> (*ecp != 0) {
00127 config_perror(<span class="stringliteral">"Bad number"</span>);
00128 } <span class="keywordflow">else</span> {
00129 netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
00130 NETSNMP_DS_AGENT_USERID, uid);
00131 }
00132 }
00133 <span class="preprocessor">#if defined(HAVE_GETPWNAM) && defined(HAVE_PWD_H)</span>
00134 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((info = getpwnam(cptr)) != NULL) {
00135 netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
00136 NETSNMP_DS_AGENT_USERID, info->pw_uid);
00137 } <span class="keywordflow">else</span> {
00138 config_perror(<span class="stringliteral">"User not found in passwd database"</span>);
00139 }
00140 endpwent();
00141 <span class="preprocessor">#endif</span>
00142 }
00143
00144 <span class="keywordtype">void</span>
00145 snmpd_set_agent_group(<span class="keyword">const</span> <span class="keywordtype">char</span> *token, <span class=
"keywordtype">char</span> *cptr)
00146 {
00147 <span class="preprocessor">#if defined(HAVE_GETGRNAM) && defined(HAVE_GRP_H)</span>
00148 <span class="keyword">struct </span>group *info;
00149 <span class="preprocessor">#endif</span>
00150
00151 <span class="keywordflow">if</span> (cptr[0] == <span class="charliteral">'#'</span>) {
00152 <span class="keywordtype">char</span> *ecp;
00153 <span class="keywordtype">int</span> gid = strtoul(cptr + 1, &ecp, 10);
00154 <span class="keywordflow">if</span> (*ecp != 0) {
00155 config_perror(<span class="stringliteral">"Bad number"</span>);
00156 } <span class="keywordflow">else</span> {
00157 netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
00158 NETSNMP_DS_AGENT_GROUPID, gid);
00159 }
00160 }
00161 <span class="preprocessor">#if defined(HAVE_GETGRNAM) && defined(HAVE_GRP_H)</span>
00162 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((info = getgrnam(cptr)) != NULL) {
00163 netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
00164 NETSNMP_DS_AGENT_GROUPID, info->gr_gid);
00165 } <span class="keywordflow">else</span> {
00166 config_perror(<span class="stringliteral">"Group not found in group database"</span>);
00167 }
00168 endpwent();
00169 <span class="preprocessor">#endif</span>
00170 }
00171 <span class="preprocessor">#endif</span>
00172
00173 <span class="keywordtype">void</span>
00174 snmpd_set_agent_address(<span class="keyword">const</span> <span class="keywordtype">char</span> *token, <span class=
"keywordtype">char</span> *cptr)
00175 {
00176 <span class="keywordtype">char</span> buf[SPRINT_MAX_LEN];
00177 <span class="keywordtype">char</span> *ptr;
00178
00179 <span class="comment">/*</span>
00180 <span class="comment"> * has something been specified before? </span>
00181 <span class="comment"> */</span>
00182 ptr = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
00183 NETSNMP_DS_AGENT_PORTS);
00184
00185 <span class="keywordflow">if</span> (ptr) {
00186 <span class="comment">/*</span>
00187 <span class="comment"> * append to the older specification string </span>
00188 <span class="comment"> */</span>
00189 sprintf(buf, <span class="stringliteral">"%s,%s"</span>, ptr, cptr);
00190 } <span class="keywordflow">else</span> {
00191 strcpy(buf, cptr);
00192 }
00193
00194 DEBUGMSGTL((<span class="stringliteral">"snmpd_ports"</span>, <span class=
"stringliteral">"port spec: %s\n"</span>, buf));
00195 netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
00196 NETSNMP_DS_AGENT_PORTS, buf);
00197 }
00198
00199 <span class="keywordtype">void</span>
00200 init_agent_read_config(<span class="keyword">const</span> <span class="keywordtype">char</span> *app)
00201 {
00202 <span class="keywordflow">if</span> (app != NULL) {
00203 netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID,
00204 NETSNMP_DS_LIB_APPTYPE, app);
00205 } <span class="keywordflow">else</span> {
00206 app = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
00207 NETSNMP_DS_LIB_APPTYPE);
00208 }
00209
00210 register_app_config_handler(<span class="stringliteral">"authtrapenable"</span>,
00211 snmpd_parse_config_authtrap, NULL,
00212 <span class="stringliteral">"1 | 2\t\t(1 = enable, 2 = disable)"</span>);
00213 register_app_config_handler(<span class="stringliteral">"pauthtrapenable"</span>,
00214 snmpd_parse_config_authtrap, NULL, NULL);
00215
00216
00217 <span class="keywordflow">if</span> (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
00218 NETSNMP_DS_AGENT_ROLE) == MASTER_AGENT) {
00219 <span class="preprocessor">#ifndef DISABLE_SNMPV1</span>
00220 register_app_config_handler(<span class="stringliteral">"trapsink"</span>,
00221 snmpd_parse_config_trapsink,
00222 snmpd_free_trapsinks,
00223 <span class="stringliteral">"host [community] [port]"</span>);
00224 <span class="preprocessor">#endif</span>
00225 <span class="preprocessor">#ifndef DISABLE_SNMPV2C</span>
00226 register_app_config_handler(<span class="stringliteral">"trap2sink"</span>,
00227 snmpd_parse_config_trap2sink, NULL,
00228 <span class="stringliteral">"host [community] [port]"</span>);
00229 register_app_config_handler(<span class="stringliteral">"informsink"</span>,
00230 snmpd_parse_config_informsink, NULL,
00231 <span class="stringliteral">"host [community] [port]"</span>);
00232 <span class="preprocessor">#endif</span>
00233 register_app_config_handler(<span class="stringliteral">"trapsess"</span>,
00234 snmpd_parse_config_trapsess, NULL,
00235 <span class="stringliteral">"[snmpcmdargs] host"</span>);
00236 }
00237 <span class="preprocessor">#if !defined(DISABLE_SNMPV1) || !defined(DISABLE_SNMPV2C)</span>
00238 register_app_config_handler(<span class="stringliteral">"trapcommunity"</span>,
00239 snmpd_parse_config_trapcommunity,
00240 snmpd_free_trapcommunity,
00241 <span class="stringliteral">"community-string"</span>);
00242 <span class="preprocessor">#endif </span><span class="comment">/* support for community based SNMP */</span>
00243 <span class="preprocessor">#ifdef HAVE_UNISTD_H</span>
00244 register_app_config_handler(<span class="stringliteral">"agentuser"</span>,
00245 snmpd_set_agent_user, NULL, <span class="stringliteral">"userid"</span>);
00246 register_app_config_handler(<span class="stringliteral">"agentgroup"</span>,
00247 snmpd_set_agent_group, NULL, <span class="stringliteral">"groupid"</span>);
00248 <span class="preprocessor">#endif</span>
00249 register_app_config_handler(<span class="stringliteral">"agentaddress"</span>,
00250 snmpd_set_agent_address, NULL,
00251 <span class="stringliteral">"SNMP bind address"</span>);
00252 netsnmp_ds_register_config(ASN_BOOLEAN, app, <span class="stringliteral">"quit"</span>,
00253 NETSNMP_DS_APPLICATION_ID,
00254 NETSNMP_DS_AGENT_QUIT_IMMEDIATELY);
00255 netsnmp_ds_register_config(ASN_BOOLEAN, app, <span class="stringliteral">"leave_pidfile"</span>,
00256 NETSNMP_DS_APPLICATION_ID,
00257 NETSNMP_DS_AGENT_LEAVE_PIDFILE);
00258 netsnmp_init_handler_conf();
00259
00260 <span class="preprocessor">#include "agent_module_dot_conf.h"</span>
00261 <span class="preprocessor">#include "mib_module_dot_conf.h"</span>
00262 <span class="preprocessor">#ifdef TESTING</span>
00263 print_config_handlers();
00264 <span class="preprocessor">#endif</span>
00265 }
00266
00267 <span class="keywordtype">void</span>
00268 update_config(<span class="keywordtype">void</span>)
00269 {
00270 <a class="code" href="group__callback.html#ga10">snmp_call_callbacks</a>(SNMP_CALLBACK_APPLICATION,
00271 SNMPD_CALLBACK_PRE_UPDATE_CONFIG, NULL);
00272 free_config();
00273 read_configs();
00274 }
00275
00276
00277 <span class="keywordtype">void</span>
00278 snmpd_register_config_handler(<span class="keyword">const</span> <span class="keywordtype">char</span> *token,
00279 <span class="keywordtype">void</span> (*parser) (<span class=
"keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">char</span> *),
00280 <span class="keywordtype">void</span> (*releaser) (<span class=
"keywordtype">void</span>), <span class="keyword">const</span> <span class="keywordtype">char</span> *help)
00281 {
00282 DEBUGMSGTL((<span class="stringliteral">"snmpd_register_app_config_handler"</span>,
00283 <span class="stringliteral">"registering .conf token for \"%s\"\n"</span>, token));
00284 register_app_config_handler(token, parser, releaser, help);
00285 }
00286
00287 <span class="keywordtype">void</span>
00288 snmpd_unregister_config_handler(<span class="keyword">const</span> <span class="keywordtype">char</span> *token)
00289 {
00290 unregister_app_config_handler(token);
00291 }
00292
00293 <span class="comment">/*</span>
00294 <span class="comment"> * this function is intended for use by mib-modules to store permenant</span>
00295 <span class="comment"> * configuration information generated by sets or persistent counters </span>
00296 <span class="comment"> */</span>
00297 <span class="keywordtype">void</span>
00298 snmpd_store_config(<span class="keyword">const</span> <span class="keywordtype">char</span> *line)
00299 {
00300 read_app_config_store(line);
00301 }
</pre>
</div>
<hr size="1" />
<address style="align: right;">
<small>Generated on Fri Dec 30 13:47:43 2005 for net-snmp by <a href="http://www.doxygen.org/index.html"><img src=
"doxygen.png" alt="doxygen" align="middle" border="0" /></a> 1.3.9.1</small>
</address>
<!-- CONTENT END -->
<!--#include virtual="/page-bottom.html" -->
See more files for this project here