memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, fname.c_str(), fname.length());
+ if(fname.length()+1 > sizeof(addr.sun_path)) {
+ L<<Logger::Critical<<"Unable to open controlsocket, path '"<<fname<<"' too long."<<endl;
+ exit(1);
+ }
+ strcpy(addr.sun_path, fname.c_str());
int status = connect(fd, (struct sockaddr*)&addr, sizeof(addr));
close(fd);
struct sockaddr_un local;
memset(&local,0,sizeof(local));
local.sun_family=AF_UNIX;
- strncpy(local.sun_path, fname.c_str(), fname.length());
+ if(fname.length()+1 > sizeof(local.sun_path)) {
+ L<<Logger::Critical<<"Unable to bind to controlsocket, path '"<<fname<<"' too long."<<endl;
+ exit(1);
+ }
+ strcpy(local.sun_path, fname.c_str());
createSocketAndBind(AF_UNIX, (struct sockaddr*)& local, sizeof(local));
d_socketname=fname;
// hack: this removes the duplicate quit method
funcs.resize(unique(funcs.begin(), funcs.end()) - funcs.begin());
return boost::join(funcs, "\n");
-}
\ No newline at end of file
+}
memset(&d_local,0,sizeof(d_local));
d_local.sun_family=AF_UNIX;
+ if(fname.length()+1 > sizeof(d_local.sun_path))
+ throw PDNSException("Unable to bind to controlsocket, path '"+fname+"' too long.");
strcpy(d_local.sun_path, fname.c_str());
if(bind(d_fd, (sockaddr*)&d_local,sizeof(d_local))<0)