Example #1
0
int
win32_process_pipe(HANDLE* ret){
	SECURITY_ATTRIBUTES sat;
	HANDLE tmp;

	sat.nLength = sizeof(SECURITY_ATTRIBUTES);
	sat.bInheritHandle = TRUE;
	sat.lpSecurityDescriptor = NULL;

	if(!CreatePipe(&tmp,&ret[0],&sat,0)){
		OSERROR("createpipe"); // handle Win32 Error Here
		return 0;
	}
	DuplicateHandle(GetCurrentProcess(),tmp,GetCurrentProcess(),&ret[1],0,FALSE,DUPLICATE_SAME_ACCESS);
	CloseHandle(tmp);
#if 0 // won't work..
	/* make non-inheritable */
	if(!SetHandleInformation(ret[1], HANDLE_FLAG_INHERIT, 0)){
		OSERROR("sethandleinformation");
		return 0;
	}
#endif

	return 1;
}
Example #2
0
static PyObject *
PyFB_ipstats(PyObject *self)
{
	struct ipstat ipstat;
	size_t len = sizeof ipstat; 
	PyObject *r, *t;

	if (sysctlbyname("net.inet.ip.stats", &ipstat, &len, NULL, 0) < 0)
		return OSERROR();

	r = PyDict_New();

#define p(f) \
	t = PyLong_FromUnsignedLong((unsigned long)ipstat.ips_##f); \
	PyDict_SetItemString(r, #f, t); \
	Py_DECREF(t);
	p(total);           p(badsum);
	p(toosmall);        p(tooshort);
	p(toolong);         p(badhlen);
	p(badlen);          p(badoptions);
	p(badvers);         p(fragments);
	p(fragdropped);     p(fragtimeout);
	p(reassembled);     p(delivered);
	p(noproto);         p(forward);
	p(forward);         p(fastforward);
	p(cantforward);     p(notmember);
	p(redirectsent);    p(localout);
	p(rawout);          p(odropped);
	p(noroute);         p(fragmented);
	p(ofragments);      p(cantfrag);
	p(nogif);           p(badaddr);
#undef p

	return r;
}
Example #3
0
int
win32_handle_write(HANDLE h,void *p,unsigned int len,unsigned int *res){
	BOOL r;
	r = WriteFile(h,p,len,res,NULL);
	if(!r){
		OSERROR("WriteFile");
		return 0;
	}
	return 1;
}
Example #4
0
uintptr_t
win32_create_named_pipe(wchar_t* name){
	HANDLE h;
	h = CreateNamedPipeW(name,PIPE_ACCESS_DUPLEX,PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,4096,4096,0,NULL);
	if(h == INVALID_HANDLE_VALUE){
		OSERROR("CreateNamedPipeW");
		return -1;
	}
	return (uintptr_t)h;
}
Example #5
0
int
win32_handle_wait(HANDLE h){
	BOOL r;
	r = WaitForSingleObject(h,INFINITE);
	if(!r){
		OSERROR("WaitForSingleObject");
		return 0;
	}
	return 1;
}
Example #6
0
int
win32_handle_close(HANDLE h){
	BOOL r;
	r = CloseHandle(h);
	if(!r){
		OSERROR("CloseHandle");
		return 0;
	}
	return 1;
}
Example #7
0
int
win32_process_wait(HANDLE process){
	BOOL r;
	DWORD res;
	r = WaitForSingleObject(process,INFINITE);
	if(!r){
		OSERROR("WaitForSingleObject");
		return -1;
	}
	GetExitCodeProcess(process,&res);
	CloseHandle(process);
	return res;
}
Example #8
0
static PyObject *
PyFB_tcpstats(PyObject *self)
{
	struct tcpstat tcpstat;
	size_t len = sizeof tcpstat; 
	PyObject *r, *t;

	if (sysctlbyname("net.inet.tcp.stats", &tcpstat, &len, NULL, 0) < 0)
		return OSERROR();

	r = PyDict_New();

#define p(f) \
	t = PyLong_FromUnsignedLong((unsigned long)tcpstat.tcps_##f); \
	PyDict_SetItemString(r, #f, t); \
	Py_DECREF(t);

	p(sndtotal);        p(sndpack);         p(sndbyte);
	p(sndrexmitpack);   p(sndrexmitbyte);   p(mturesent);
	p(sndacks);         p(delack);          p(sndurg);
	p(sndprobe);        p(sndwinup);        p(sndctrl);
	p(rcvtotal);        p(rcvackpack);      p(rcvackbyte);
	p(rcvdupack);       p(rcvacktoomuch);   p(rcvpack);
	p(rcvbyte);         p(rcvduppack);      p(rcvdupbyte);
	p(pawsdrop);        p(rcvpartduppack);  p(rcvpartdupbyte);
	p(rcvoopack);       p(rcvoobyte);       p(rcvpackafterwin);
	p(rcvbyteafterwin); p(rcvwinprobe);     p(rcvwinupd);
	p(rcvafterclose);   p(rcvbadsum);       p(rcvbadoff);
	p(rcvshort);        p(connattempt);     p(accepts);
	p(badsyn);          p(listendrop);      p(connects);
	p(closed);          p(drops);           p(cachedrtt);
	p(cachedrttvar);    p(cachedssthresh);  p(conndrops);
	p(rttupdated);      p(segstimed);       p(rexmttimeo);
	p(timeoutdrop);     p(persisttimeo);    p(persistdrop);
	p(keeptimeo);       p(keepprobe);       p(keepdrops);
	p(predack);         p(preddat);         p(sc_added);
	p(sc_retransmitted); p(sc_dupsyn);      p(sc_dropped);
	p(sc_completed);    p(sc_bucketoverflow);
	p(sc_cacheoverflow); p(sc_reset);       p(sc_stale);
	p(sc_aborted);      p(sc_badack);       p(sc_unreach);
	p(sc_zonefail);     p(sc_sendcookie);   p(sc_recvcookie);
#undef p

	return r;
}
Example #9
0
uintptr_t
win32_process_redirected_child(wchar_t* spec,wchar_t* dir, HANDLE std_in, HANDLE std_out, HANDLE std_err){
	PROCESS_INFORMATION pi;
	STARTUPINFOW si;
	BOOL r;

	ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
	ZeroMemory(&si, sizeof(STARTUPINFOW));

	si.cb = sizeof(STARTUPINFO);
	si.dwFlags = STARTF_USESTDHANDLES;
	if(std_in != 0){
		si.hStdInput = std_in;
	}else{
		si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
	}
	if(std_out != 0){
		si.hStdOutput = std_out;
	}else{
		si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	}
	if(std_err != 0){
		si.hStdError = std_err;
	}else{
		si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
	}

	r = CreateProcessW(NULL, spec, NULL, NULL, TRUE, 0, NULL, dir, &si, &pi);

	if(std_out != 0){
		CloseHandle(std_out);
	}

	if(std_err != 0){
		CloseHandle(std_err);
	}

	if (! r){
		OSERROR("CreateProcess");
		return 0;
	}
	CloseHandle(pi.hThread);
	return (uintptr_t)pi.hProcess;
}
Example #10
0
static PyObject *
PyFB_udpstats(PyObject *self)
{
	struct udpstat udpstat;
	size_t len = sizeof udpstat; 
	PyObject *r, *t;

	if (sysctlbyname("net.inet.udp.stats", &udpstat, &len, NULL, 0) < 0)
		return OSERROR();

	r = PyDict_New();

#define p(f) \
	t = PyLong_FromUnsignedLong((unsigned long)udpstat.udps_##f); \
	PyDict_SetItemString(r, #f, t); \
	Py_DECREF(t);

	p(ipackets);       p(hdrops);         p(badlen);
	p(badsum);         p(nosum);          p(noport);
	p(noportbcast);    p(fullsock);       

	t = PyLong_FromUnsignedLong((unsigned long)udpstat.udpps_pcbhashmiss);
	PyDict_SetItemString(r, "pcbhashmiss", t);
	Py_DECREF(t);

	t = PyLong_FromUnsignedLong((unsigned long)(
				udpstat.udps_ipackets -
				udpstat.udps_hdrops -
				udpstat.udps_badlen -
				udpstat.udps_badsum -
				udpstat.udps_noport -
				udpstat.udps_noportbcast -
				udpstat.udps_fullsock
				));
	PyDict_SetItemString(r, "delivered", t);
	Py_DECREF(t);
	p(opackets);
#undef p

	return r;
}
Example #11
0
static PyObject *
PyFB_getpwnam(PyObject *self, PyObject *args)
{
	struct passwd *pwd;
	char *name;

	if (!PyArg_ParseTuple(args, "s:getpwnam", &name))
		return NULL;

	errno = 0;
	pwd = getpwnam(name);
	if (pwd == NULL) {
		if (errno == 0) {
			PyErr_SetString(PyExc_KeyError, name);
			return NULL;
		}
		else
			return OSERROR();
	}

	return PyObject_FromPasswd(pwd);
}
Example #12
0
static PyObject *
PyFB_getpwuid(PyObject *self, PyObject *args)
{
	struct passwd *pwd;
	int uid;

	if (!PyArg_ParseTuple(args, "i:getpwuid", &uid))
		return NULL;

	errno = 0;
	pwd = getpwuid((uid_t)uid);
	if (pwd == NULL) {
		if (errno == 0) {
			PyObject *uidn = PyInt_FromLong(uid);
			PyErr_SetObject(PyExc_KeyError, uidn);
			Py_DECREF(uidn);
			return NULL;
		}
		else
			return OSERROR();
	}
	return PyObject_FromPasswd(pwd);
}
Example #13
0
static PyObject *
PyFB_ifstats(PyObject *self)
{
	int mib_ifdata[6] = { CTL_NET, PF_LINK, NETLINK_GENERIC,
			      IFMIB_IFDATA, 0, IFDATA_GENERAL};
	struct ifmibdata ifmd;
	size_t len; 
	int value, i;
	PyObject *r, *d, *t;

	len = sizeof value;
	if (sysctlbyname("net.link.generic.system.ifcount", &value,
			 &len, NULL, 0) < 0)
		return OSERROR();

	r = PyDict_New();

	for (i = 1; i <= value; i++) {
		len = sizeof ifmd;
		mib_ifdata[4] = i;
		if (sysctl(mib_ifdata, 6, &ifmd, &len, NULL, 0) < 0) {
			Py_DECREF(r);
			PyErr_SetFromErrno(PyExc_OSError);
			return Py_None;
		}

		d = PyDict_New();

#define p_long(f)   p(PyLong_FromUnsignedLong, unsigned long, f)
#define p_str(f)    p(PyString_FromString, char *, f)
#define p_int(f)    p(PyInt_FromLong, long, f)

#define p(adoptor, castor, f) \
		t = adoptor((castor)ifmd.ifmd_##f); \
		PyDict_SetItemString(d, #f, t); \
		Py_DECREF(t);
		p_str(name);        p_int(pcount);
		p_int(flags);       p_int(snd_len);
		p_int(snd_maxlen);  p_int(snd_drops);
#undef p

#define p(adoptor, castor, f) \
		t = adoptor((castor)ifmd.ifmd_data.ifi_##f); \
		PyDict_SetItemString(d, #f, t); \
		Py_DECREF(t);
		p_int(type);        p_int(physical);
		p_int(addrlen);     p_int(hdrlen);
		p_int(recvquota);   p_int(xmitquota);
		p_long(mtu);        p_long(metric);
		p_long(baudrate);   p_long(ipackets);
		p_long(ierrors);    p_long(opackets);
		p_long(oerrors);    p_long(collisions);
		p_long(ibytes);     p_long(obytes);
		p_long(imcasts);    p_long(omcasts);
		p_long(iqdrops);    p_long(noproto);
		p_long(hwassist);
#undef p

		PyDict_SetItemString(r, ifmd.ifmd_name, d);
		Py_DECREF(d);
	}

	return r;
}