예제 #1
0
파일: File.cpp 프로젝트: SunHJ/MyBase
LONG File::Write(CPCCHAR cpcBuffer, LONG lBufferSize, LONG lWriteSize)
{
    LONG lResult = -1;

    CHECK_RETURN_CODE(m_hFile, -1);
    CHECK_RETURN_CODE(lBufferSize > 0, -1);
    CHECK_RETURN_CODE(lWriteSize > 0, -1);
    CHECK_RETURN_CODE(lWriteSize <= lBufferSize, -1);

	lResult = g_WriteFile(m_hFile, cpcBuffer, lWriteSize);
    return lResult;
}
예제 #2
0
파일: File.cpp 프로젝트: SunHJ/MyBase
LONG File::Read(CONST PCHAR cpBuffer, LONG lBufferSize, LONG lReadSize)
{
    LONG lResult = -1;

    CHECK_RETURN_CODE(m_hFile, -1);
    CHECK_RETURN_CODE(lBufferSize > 0, -1);
    CHECK_RETURN_CODE(lReadSize > 0, -1);
    CHECK_RETURN_CODE(lReadSize <= lBufferSize, -1);

	lResult = g_ReadFile(m_hFile, cpBuffer, lReadSize);
    return lResult;
}
예제 #3
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_userauth_publickey_fromfile(SSH2_SessionObj *self, PyObject *args)
{
	char *username;
	char *publickey;
	char *privatekey;
	char *passphrase = "";
	Py_ssize_t username_len;
	int ret;

	if (!PyArg_ParseTuple(args, "s#ss|s:userauth_publickey_fromfile",
	                      &username, &username_len, &publickey, &privatekey,
	                      &passphrase))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_userauth_publickey_fromfile_ex(self->session, username,
	                                             username_len, publickey,
	                                             privatekey, passphrase);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self)

	Py_RETURN_NONE;
}
예제 #4
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_userauth_publickey(SSH2_SessionObj *self, PyObject *args)
{
	char *username;
	char *pubkeydata;
	Py_ssize_t pubkeydata_len;
	PyObject *callback;
	int ret;

#if PY_MAJOR_VERSION < 3
	if (!PyArg_ParseTuple(args, "ss#O:userauth_publickey", &username, &pubkeydata, &pubkeydata_len, &callback))
#else
	if (!PyArg_ParseTuple(args, "sy#O:userauth_publickey", &username, &pubkeydata, &pubkeydata_len, &callback))
#endif
		return NULL;

	if (!PyCallable_Check(callback))
		return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_userauth_publickey(self->session, username,
	                                 (unsigned char*)pubkeydata, pubkeydata_len,
	                                 publickey_sign_callback, (void **)&callback);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self)

	Py_RETURN_NONE;
}
예제 #5
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_userauth_keyboard_interactive(SSH2_SessionObj *self, PyObject *args)
{
	char *username;
	Py_ssize_t username_len;
	PyObject *callback;
	int ret;

	if (!PyArg_ParseTuple(args, "s#O:userauth_keyboard_interactive",
	                      &username, &username_len, &callback))
		return NULL;

	if (!PyCallable_Check(callback))
		return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);

	Py_DECREF(self->cb_kbdint_response);
	Py_INCREF(callback);
	self->cb_kbdint_response = callback;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_userauth_keyboard_interactive_ex(self->session, username, username_len, kbdint_response_callback);
	Py_END_ALLOW_THREADS

	Py_DECREF(self->cb_kbdint_response);
	Py_INCREF(Py_None);
	self->cb_kbdint_response = Py_None;

	CHECK_RETURN_CODE(ret, self)

	Py_RETURN_NONE;
}
예제 #6
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_startup(SSH2_SessionObj *self, PyObject *args)
{
	PyObject *sock;
	int ret;
	int fd;

	if (!PyArg_ParseTuple(args, "O:startup", &sock))
		return NULL;

	if ((fd = PyObject_AsFileDescriptor(sock)) == -1) {
		PyErr_SetString(PyExc_ValueError, "argument must be a file descriptor");
		return NULL;
	}

	Py_BEGIN_ALLOW_THREADS
	ret=libssh2_session_startup(self->session, fd);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self)

	Py_DECREF(self->socket);
	Py_INCREF(sock);

	self->socket = sock;
	self->opened = 1;

	Py_RETURN_NONE;
}
예제 #7
0
파일: File.cpp 프로젝트: SunHJ/MyBase
LONG File::WriteTextLine(CPCCHAR cpcStr, LONG lWriteLen)
{
	LONG lResult = 0;
	LONG lReCode = 0;
    CHECK_RETURN_CODE(m_hFile, -1);
    CHECK_RETURN_CODE(!m_bBinaryFile, -1);
    CHECK_RETURN_CODE(cpcStr, -1);
    CHECK_RETURN_CODE_QUIET(cpcStr[0], 0);
    CHECK_RETURN_CODE_QUIET(lWriteLen != 0, 0);

    CHECK_RETURN_CODE(lWriteLen > 0, -1);

    LONG lStrLen = static_cast<LONG>(::strnlen(cpcStr, lWriteLen));
    CHECK_RETURN_CODE(lStrLen <= lWriteLen, -1);

	lReCode = g_WriteString(m_hFile, cpcStr);
	CHECK_RETURN_CODE(lReCode > 0, -1);
	lResult += lReCode;

	lReCode = g_WriteString(m_hFile, FILE_LINE_BREAK);
	CHECK_RETURN_CODE(lReCode > 0, -1);
	lResult += lReCode;

    return lResult;
}
예제 #8
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_close(SSH2_ChannelObj *self)
{
	int ret;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_close(self->channel);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #9
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_shell(SSH2_ChannelObj *self)
{
	int ret;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_process_startup(self->channel, "shell", 5, NULL, 0);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #10
0
파일: File.cpp 프로젝트: SunHJ/MyBase
LONG File::ReadTextLine(CONST PCHAR cpStr, LONG lReadLen)
{
    LONG lResult = -1;

    CHECK_RETURN_CODE(m_hFile, -1);
    CHECK_RETURN_CODE(!m_bBinaryFile, -1);
    CHECK_RETURN_CODE(cpStr, -1);
    CHECK_RETURN_CODE_QUIET(lReadLen != 0, 0);

    CHECK_RETURN_CODE(lReadLen > 0, -1);
	lResult = g_ReadString(m_hFile, cpStr, lReadLen);

	// 去除读取的行尾的\n
    char *pNewLine = &cpStr[lResult - 1];
    if (*pNewLine == '\n')
    {
        *pNewLine = '\0';
        --lResult;
    }

    return lResult;
}
예제 #11
0
static PyObject *
SFTP_handle_close(SSH2_SFTP_handleObj *self)
{
	int ret;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_sftp_close_handle(self->sftphandle);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #12
0
static PyObject *
listener_cancel(SSH2_ListenerObj *self)
{
	int ret;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_forward_cancel(self->listener);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #13
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_method_pref(SSH2_SessionObj *self, PyObject *args)
{
	int ret;
	int method;
	char *pref;

	if (!PyArg_ParseTuple(args, "is:method_pref", &method, &pref))
		return NULL;

	ret = libssh2_session_method_pref(self->session, method, pref);

	CHECK_RETURN_CODE(ret, self)

	Py_RETURN_NONE;
}
예제 #14
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_subsystem(SSH2_ChannelObj *self, PyObject *args)
{
	char *subsys;
	Py_ssize_t subsys_len;
	int ret;

	if (!PyArg_ParseTuple(args, "s#:subsystem", &subsys, &subsys_len))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_process_startup(self->channel, "subsystem", 9, subsys, subsys_len);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #15
0
파일: channel.c 프로젝트: elektro79/ssh4py
/* Can not be called just 'Channel.exec' like in the C API,
 * because of 'exec' is a reserved keyword in Python 2. */
static PyObject *
channel_execute(SSH2_ChannelObj *self, PyObject *args)
{
	char *cmd;
	Py_ssize_t cmd_len;
	int ret;

	if (!PyArg_ParseTuple(args, "s#:execute", &cmd, &cmd_len))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_process_startup(self->channel, "exec", 4, cmd, cmd_len);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #16
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_userauth_password(SSH2_SessionObj *self, PyObject *args)
{
	char *username;
	char *password;
	Py_ssize_t username_len;
	Py_ssize_t password_len;
	PyObject *callback = NULL;
	int ret;

	if (!PyArg_ParseTuple(args, "s#s#|O:userauth_password", &username, &username_len,
	                                                        &password, &password_len,
	                                                        &callback))
		return NULL;

	if (callback != NULL) {
		if (!PyCallable_Check(callback))
			return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);

		Py_DECREF(self->cb_passwd_changereq);
		Py_INCREF(callback);
		self->cb_passwd_changereq = callback;

		Py_BEGIN_ALLOW_THREADS
		ret = libssh2_userauth_password_ex(self->session, username, username_len,
		                                                  password, password_len,
		                                                  passwd_changereq_callback);
		Py_END_ALLOW_THREADS

		Py_DECREF(self->cb_passwd_changereq);
		Py_INCREF(Py_None);
		self->cb_passwd_changereq = Py_None;
	} else {
		Py_BEGIN_ALLOW_THREADS
		ret = libssh2_userauth_password_ex(self->session, username, username_len,
		                                                  password, password_len,
		                                                  NULL);
		Py_END_ALLOW_THREADS
	}

	CHECK_RETURN_CODE(ret, self)

	Py_RETURN_NONE;
}
예제 #17
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_request_pty_size(SSH2_ChannelObj *self, PyObject *args)
{
	int ret;
	int w = 80;
	int h = 24;


	if (!PyArg_ParseTuple(args, "ii:request_pty_size", &w, &h))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_request_pty_size(self->channel, w, h);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #18
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_setenv(SSH2_ChannelObj *self, PyObject *args)
{
	char *key;
	char *val;
	Py_ssize_t key_len;
	Py_ssize_t val_len;
	int ret;

	if (!PyArg_ParseTuple(args, "s#s#:setenv", &key, &key_len, &val, &val_len))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_setenv_ex(self->channel, key, key_len, val, val_len);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #19
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_disconnect(SSH2_SessionObj *self, PyObject *args, PyObject *kwds)
{
	int ret;
	int reason = SSH_DISCONNECT_BY_APPLICATION;
	char *description = "";
	char *lang = "";
	static char *kwlist[] = {"reason", "description", "lang", NULL};

	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iss:disconnect", kwlist, &reason, &description, &lang))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_session_disconnect_ex(self->session, reason, description, lang);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self)

	self->opened = 0;

	Py_RETURN_NONE;
}
예제 #20
0
파일: session.c 프로젝트: vianney/ssh4py
static PyObject *
session_userauth_hostbased_fromfile(SSH2_SessionObj *self, PyObject *args)
{
	char *username;
	char *publickey;
	char *privatekey;
	char *passphrase;
	char *hostname;
	char *local_username = NULL;
	Py_ssize_t username_len;
	Py_ssize_t hostname_len;
	Py_ssize_t local_username_len;
	int ret;

	if (!PyArg_ParseTuple(args, "s#ssss#|s#:userauth_hostbased_fromfile",
	                      &username, &username_len,
	                      &publickey, &privatekey, &passphrase,
	                      &hostname, &hostname_len,
	                      &local_username, &local_username_len))
		return NULL;

	if (local_username == NULL) {
		local_username     = username;
		local_username_len = username_len;
	}

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_userauth_hostbased_fromfile_ex(self->session,
	                                             username, username_len,
	                                             publickey, privatekey, passphrase,
	                                             hostname, hostname_len,
	                                             local_username, local_username_len);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self)

	Py_RETURN_NONE;
}
예제 #21
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_x11_req(SSH2_ChannelObj *self, PyObject *args, PyObject *kwds)
{
	int screen_number;
	int single_connection = 0;
	int ret;
	char *auth_proto = NULL;
	char *auth_cookie = NULL;
	static char *kwlist[] = {"screen_number", "single_connection", "auth_proto", "auth_cookie", NULL};

	if (!PyArg_ParseTupleAndKeywords(args, kwds, "i|iss", kwlist,
	                                 &screen_number, &single_connection,
	                                 &auth_proto, &auth_cookie))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_x11_req_ex(self->channel, single_connection, auth_proto, auth_cookie, screen_number);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}
예제 #22
0
파일: channel.c 프로젝트: elektro79/ssh4py
static PyObject *
channel_request_pty(SSH2_ChannelObj *self, PyObject *args)
{
	char *term;
	char *modes = NULL;
	Py_ssize_t lt;
	Py_ssize_t lm = 0;
	int ret;
	int w = 80;
	int h = 24;
	int pw = 0;
	int ph = 0;

	if (!PyArg_ParseTuple(args, "s#|s#iiii:request_pty", &term, &lt, &modes, &lm, &w, &h, &pw, &ph))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = libssh2_channel_request_pty_ex(self->channel, term, lt, modes, lm, w, h, pw, ph);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_CODE(ret, self->session)

	Py_RETURN_NONE;
}