mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 08:38:27 -05:00
Fixed replication authentication with whitespace in password
This commit is contained in:
parent
44571088d8
commit
e8d68b6b72
@ -1315,24 +1315,31 @@ error:
|
|||||||
#define SYNC_CMD_FULL (SYNC_CMD_READ|SYNC_CMD_WRITE)
|
#define SYNC_CMD_FULL (SYNC_CMD_READ|SYNC_CMD_WRITE)
|
||||||
char *sendSynchronousCommand(int flags, int fd, ...) {
|
char *sendSynchronousCommand(int flags, int fd, ...) {
|
||||||
|
|
||||||
/* Create the command to send to the master, we use simple inline
|
/* Create the command to send to the master, we use redis binary
|
||||||
* protocol for simplicity as currently we only send simple strings. */
|
* protocol to make sure correct arguments are sent. This function
|
||||||
|
* is not safe for all binary data.*/
|
||||||
if (flags & SYNC_CMD_WRITE) {
|
if (flags & SYNC_CMD_WRITE) {
|
||||||
char *arg;
|
char *arg;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
sds cmd = sdsempty();
|
sds cmd = sdsempty();
|
||||||
|
sds cmdargs = sdsempty();
|
||||||
|
int argslen = 0;
|
||||||
va_start(ap,fd);
|
va_start(ap,fd);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
arg = va_arg(ap, char*);
|
arg = va_arg(ap, char*);
|
||||||
if (arg == NULL) break;
|
if (arg == NULL) break;
|
||||||
|
|
||||||
if (sdslen(cmd) != 0) cmd = sdscatlen(cmd," ",1);
|
cmdargs = sdscatprintf(cmdargs,"$%zu\r\n%s\r\n",strlen(arg),arg);
|
||||||
cmd = sdscat(cmd,arg);
|
argslen++;
|
||||||
}
|
}
|
||||||
cmd = sdscatlen(cmd,"\r\n",2);
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
|
cmd = sdscatprintf(cmd,"*%zu\r\n",argslen);
|
||||||
|
cmd = sdscatsds(cmd,cmdargs);
|
||||||
|
sdsfree(cmdargs);
|
||||||
|
|
||||||
/* Transfer command to the server. */
|
/* Transfer command to the server. */
|
||||||
if (syncWrite(fd,cmd,sdslen(cmd),server.repl_syncio_timeout*1000)
|
if (syncWrite(fd,cmd,sdslen(cmd),server.repl_syncio_timeout*1000)
|
||||||
== -1)
|
== -1)
|
||||||
|
Loading…
Reference in New Issue
Block a user