mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
Merge branch 'master' of git://git.samba.org/samba into convenience
This commit is contained in:
commit
4903d20c21
@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
#include <tevent.h>
|
#include <tevent.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "tevent_util.h"
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
@ -54,7 +53,8 @@ static PyObject *py_backend_list(PyObject *self)
|
|||||||
PyObject *ret;
|
PyObject *ret;
|
||||||
int i, len;
|
int i, len;
|
||||||
|
|
||||||
len = ev_str_list_length(backends);
|
for (len = 0; backends[len]; len++);
|
||||||
|
|
||||||
ret = PyList_New(len);
|
ret = PyList_New(len);
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
PyList_SetItem(ret, i, PyString_FromString(backends[i]));
|
PyList_SetItem(ret, i, PyString_FromString(backends[i]));
|
||||||
|
100
lib/util/util.c
100
lib/util/util.c
@ -836,4 +836,104 @@ _PUBLIC_ size_t utf16_len_n(const void *src, size_t n)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief String utilities.
|
||||||
|
**/
|
||||||
|
|
||||||
|
static bool next_token_internal_talloc(TALLOC_CTX *ctx,
|
||||||
|
const char **ptr,
|
||||||
|
char **pp_buff,
|
||||||
|
const char *sep,
|
||||||
|
bool ltrim)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
char *saved_s;
|
||||||
|
char *pbuf;
|
||||||
|
bool quoted;
|
||||||
|
size_t len=1;
|
||||||
|
|
||||||
|
*pp_buff = NULL;
|
||||||
|
if (!ptr) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
s = (char *)*ptr;
|
||||||
|
|
||||||
|
/* default to simple separators */
|
||||||
|
if (!sep) {
|
||||||
|
sep = " \t\n\r";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find the first non sep char, if left-trimming is requested */
|
||||||
|
if (ltrim) {
|
||||||
|
while (*s && strchr_m(sep,*s)) {
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* nothing left? */
|
||||||
|
if (!*s) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When restarting we need to go from here. */
|
||||||
|
saved_s = s;
|
||||||
|
|
||||||
|
/* Work out the length needed. */
|
||||||
|
for (quoted = false; *s &&
|
||||||
|
(quoted || !strchr_m(sep,*s)); s++) {
|
||||||
|
if (*s == '\"') {
|
||||||
|
quoted = !quoted;
|
||||||
|
} else {
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We started with len = 1 so we have space for the nul. */
|
||||||
|
*pp_buff = talloc_array(ctx, char, len);
|
||||||
|
if (!*pp_buff) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* copy over the token */
|
||||||
|
pbuf = *pp_buff;
|
||||||
|
s = saved_s;
|
||||||
|
for (quoted = false; *s &&
|
||||||
|
(quoted || !strchr_m(sep,*s)); s++) {
|
||||||
|
if ( *s == '\"' ) {
|
||||||
|
quoted = !quoted;
|
||||||
|
} else {
|
||||||
|
*pbuf++ = *s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptr = (*s) ? s+1 : s;
|
||||||
|
*pbuf = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool next_token_talloc(TALLOC_CTX *ctx,
|
||||||
|
const char **ptr,
|
||||||
|
char **pp_buff,
|
||||||
|
const char *sep)
|
||||||
|
{
|
||||||
|
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the next token from a string, return false if none found. Handles
|
||||||
|
* double-quotes. This version does not trim leading separator characters
|
||||||
|
* before looking for a token.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
|
||||||
|
const char **ptr,
|
||||||
|
char **pp_buff,
|
||||||
|
const char *sep)
|
||||||
|
{
|
||||||
|
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,6 +204,21 @@ _PUBLIC_ void display_set_stderr(void);
|
|||||||
|
|
||||||
/* The following definitions come from lib/util/util_str.c */
|
/* The following definitions come from lib/util/util_str.c */
|
||||||
|
|
||||||
|
bool next_token_talloc(TALLOC_CTX *ctx,
|
||||||
|
const char **ptr,
|
||||||
|
char **pp_buff,
|
||||||
|
const char *sep);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the next token from a string, return false if none found. Handles
|
||||||
|
* double-quotes. This version does not trim leading separator characters
|
||||||
|
* before looking for a token.
|
||||||
|
*/
|
||||||
|
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
|
||||||
|
const char **ptr,
|
||||||
|
char **pp_buff,
|
||||||
|
const char *sep);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Trim the specified elements off the front and back of a string.
|
Trim the specified elements off the front and back of a string.
|
||||||
|
@ -35,118 +35,6 @@ const char toupper_ascii_fast_table[128] = {
|
|||||||
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f
|
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @brief String utilities.
|
|
||||||
**/
|
|
||||||
|
|
||||||
static bool next_token_internal_talloc(TALLOC_CTX *ctx,
|
|
||||||
const char **ptr,
|
|
||||||
char **pp_buff,
|
|
||||||
const char *sep,
|
|
||||||
bool ltrim)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
char *saved_s;
|
|
||||||
char *pbuf;
|
|
||||||
bool quoted;
|
|
||||||
size_t len=1;
|
|
||||||
|
|
||||||
*pp_buff = NULL;
|
|
||||||
if (!ptr) {
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
s = (char *)*ptr;
|
|
||||||
|
|
||||||
/* default to simple separators */
|
|
||||||
if (!sep) {
|
|
||||||
sep = " \t\n\r";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* find the first non sep char, if left-trimming is requested */
|
|
||||||
if (ltrim) {
|
|
||||||
while (*s && strchr_m(sep,*s)) {
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* nothing left? */
|
|
||||||
if (!*s) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* When restarting we need to go from here. */
|
|
||||||
saved_s = s;
|
|
||||||
|
|
||||||
/* Work out the length needed. */
|
|
||||||
for (quoted = false; *s &&
|
|
||||||
(quoted || !strchr_m(sep,*s)); s++) {
|
|
||||||
if (*s == '\"') {
|
|
||||||
quoted = !quoted;
|
|
||||||
} else {
|
|
||||||
len++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We started with len = 1 so we have space for the nul. */
|
|
||||||
*pp_buff = TALLOC_ARRAY(ctx, char, len);
|
|
||||||
if (!*pp_buff) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* copy over the token */
|
|
||||||
pbuf = *pp_buff;
|
|
||||||
s = saved_s;
|
|
||||||
for (quoted = false; *s &&
|
|
||||||
(quoted || !strchr_m(sep,*s)); s++) {
|
|
||||||
if ( *s == '\"' ) {
|
|
||||||
quoted = !quoted;
|
|
||||||
} else {
|
|
||||||
*pbuf++ = *s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*ptr = (*s) ? s+1 : s;
|
|
||||||
*pbuf = 0;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Get the next token from a string, return false if none found. Handles
|
|
||||||
* double-quotes. This version trims leading separator characters before
|
|
||||||
* looking for a token.
|
|
||||||
*/
|
|
||||||
bool next_token(const char **ptr, char *buff, const char *sep, size_t bufsize)
|
|
||||||
{
|
|
||||||
return next_token_internal(ptr, buff, sep, bufsize, true);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool next_token_talloc(TALLOC_CTX *ctx,
|
|
||||||
const char **ptr,
|
|
||||||
char **pp_buff,
|
|
||||||
const char *sep)
|
|
||||||
{
|
|
||||||
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the next token from a string, return false if none found. Handles
|
|
||||||
* double-quotes. This version does not trim leading separator characters
|
|
||||||
* before looking for a token.
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
|
|
||||||
const char **ptr,
|
|
||||||
char **pp_buff,
|
|
||||||
const char *sep)
|
|
||||||
{
|
|
||||||
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Case insensitive string compararison.
|
* Case insensitive string compararison.
|
||||||
*
|
*
|
||||||
|
@ -88,7 +88,6 @@ NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
|
|||||||
void print_fsp_end(files_struct *fsp, enum file_close_type close_type)
|
void print_fsp_end(files_struct *fsp, enum file_close_type close_type)
|
||||||
{
|
{
|
||||||
uint32 jobid;
|
uint32 jobid;
|
||||||
fstring sharename;
|
|
||||||
|
|
||||||
if (fsp->fh->private_options & FILE_DELETE_ON_CLOSE) {
|
if (fsp->fh->private_options & FILE_DELETE_ON_CLOSE) {
|
||||||
/*
|
/*
|
||||||
@ -102,7 +101,7 @@ void print_fsp_end(files_struct *fsp, enum file_close_type close_type)
|
|||||||
string_free(&fsp->fsp_name);
|
string_free(&fsp->fsp_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rap_to_pjobid(fsp->rap_print_jobid, sharename, &jobid)) {
|
if (!rap_to_pjobid(fsp->rap_print_jobid, NULL, &jobid)) {
|
||||||
DEBUG(3,("print_fsp_end: Unable to convert RAP jobid %u to print jobid.\n",
|
DEBUG(3,("print_fsp_end: Unable to convert RAP jobid %u to print jobid.\n",
|
||||||
(unsigned int)fsp->rap_print_jobid ));
|
(unsigned int)fsp->rap_print_jobid ));
|
||||||
return;
|
return;
|
||||||
|
@ -117,7 +117,9 @@ bool rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
|
|||||||
if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) )
|
if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) )
|
||||||
{
|
{
|
||||||
struct rap_jobid_key *jinfo = (struct rap_jobid_key*)data.dptr;
|
struct rap_jobid_key *jinfo = (struct rap_jobid_key*)data.dptr;
|
||||||
|
if (sharename != NULL) {
|
||||||
fstrcpy( sharename, jinfo->sharename );
|
fstrcpy( sharename, jinfo->sharename );
|
||||||
|
}
|
||||||
*pjobid = jinfo->jobid;
|
*pjobid = jinfo->jobid;
|
||||||
DEBUG(10,("rap_to_pjobid: jobid %u maps to RAP jobid %u\n",
|
DEBUG(10,("rap_to_pjobid: jobid %u maps to RAP jobid %u\n",
|
||||||
(unsigned int)*pjobid, (unsigned int)rap_jobid));
|
(unsigned int)*pjobid, (unsigned int)rap_jobid));
|
||||||
|
@ -256,10 +256,9 @@ ssize_t write_file(struct smb_request *req,
|
|||||||
int write_path = -1;
|
int write_path = -1;
|
||||||
|
|
||||||
if (fsp->print_file) {
|
if (fsp->print_file) {
|
||||||
fstring sharename;
|
|
||||||
uint32 jobid;
|
uint32 jobid;
|
||||||
|
|
||||||
if (!rap_to_pjobid(fsp->rap_print_jobid, sharename, &jobid)) {
|
if (!rap_to_pjobid(fsp->rap_print_jobid, NULL, &jobid)) {
|
||||||
DEBUG(3,("write_file: Unable to map RAP jobid %u to jobid.\n",
|
DEBUG(3,("write_file: Unable to map RAP jobid %u to jobid.\n",
|
||||||
(unsigned int)fsp->rap_print_jobid ));
|
(unsigned int)fsp->rap_print_jobid ));
|
||||||
errno = EBADF;
|
errno = EBADF;
|
||||||
|
Loading…
Reference in New Issue
Block a user