X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/b60ed6e81233a8b3910e0a5d45031a7a6191b8bf..2b9ce0192ef93a6b01009d381202833e10dc7e4a:/src/redis.c diff --git a/src/redis.c b/src/redis.c index 6cbac778..83aa3a82 100644 --- a/src/redis.c +++ b/src/redis.c @@ -125,7 +125,7 @@ struct redisCommand redisCommandTable[] = { {"smove",smoveCommand,4,"w",0,NULL,1,2,1,0,0}, {"sismember",sismemberCommand,3,"r",0,NULL,1,1,1,0,0}, {"scard",scardCommand,2,"r",0,NULL,1,1,1,0,0}, - {"spop",spopCommand,2,"wR",0,NULL,1,1,1,0,0}, + {"spop",spopCommand,2,"wRs",0,NULL,1,1,1,0,0}, {"srandmember",srandmemberCommand,2,"rR",0,NULL,1,1,1,0,0}, {"sinter",sinterCommand,-2,"r",0,NULL,1,-1,1,0,0}, {"sinterstore",sinterstoreCommand,-3,"wm",0,NULL,2,-1,1,0,0}, @@ -207,7 +207,7 @@ struct redisCommand redisCommandTable[] = { {"watch",watchCommand,-2,"rs",0,noPreloadGetKeys,1,-1,1,0,0}, {"unwatch",unwatchCommand,1,"rs",0,NULL,0,0,0,0,0}, {"cluster",clusterCommand,-2,"ar",0,NULL,0,0,0,0,0}, - {"restore",restoreCommand,4,"awm",0,NULL,0,0,0,0,0}, + {"restore",restoreCommand,4,"awm",0,NULL,1,1,1,0,0}, {"migrate",migrateCommand,6,"aw",0,NULL,0,0,0,0,0}, {"dump",dumpCommand,2,"ar",0,NULL,0,0,0,0,0}, {"object",objectCommand,-2,"r",0,NULL,0,0,0,0,0}, @@ -822,6 +822,7 @@ void initServerConfig() { server.port = REDIS_SERVERPORT; server.bindaddr = NULL; server.unixsocket = NULL; + server.unixsocketperm = 0; server.ipfd = -1; server.sofd = -1; server.dbnum = REDIS_DEFAULT_DBNUM; @@ -935,7 +936,7 @@ void initServer() { } if (server.unixsocket != NULL) { unlink(server.unixsocket); /* don't care if this fails */ - server.sofd = anetUnixServer(server.neterr,server.unixsocket); + server.sofd = anetUnixServer(server.neterr,server.unixsocket,server.unixsocketperm); if (server.sofd == ANET_ERR) { redisLog(REDIS_WARNING, "Opening socket: %s", server.neterr); exit(1); @@ -1236,6 +1237,10 @@ int prepareForShutdown() { /* Close the listening sockets. Apparently this allows faster restarts. */ if (server.ipfd != -1) close(server.ipfd); if (server.sofd != -1) close(server.sofd); + if (server.unixsocket) { + redisLog(REDIS_NOTICE,"Removing the unix socket file."); + unlink(server.unixsocket); /* don't care if this fails */ + } redisLog(REDIS_WARNING,"Redis is now ready to exit, bye bye..."); return REDIS_OK; @@ -1244,7 +1249,9 @@ int prepareForShutdown() { /*================================== Commands =============================== */ void authCommand(redisClient *c) { - if (!server.requirepass || !strcmp(c->argv[1]->ptr, server.requirepass)) { + if (!server.requirepass) { + addReplyError(c,"Client sent AUTH, but no password is set"); + } else if (!strcmp(c->argv[1]->ptr, server.requirepass)) { c->authenticated = 1; addReply(c,shared.ok); } else { @@ -1510,10 +1517,10 @@ sds genRedisInfoString(char *section) { "used_cpu_user:%.2f\r\n" "used_cpu_sys_children:%.2f\r\n" "used_cpu_user_children:%.2f\r\n", - (float)self_ru.ru_utime.tv_sec+(float)self_ru.ru_utime.tv_usec/1000000, (float)self_ru.ru_stime.tv_sec+(float)self_ru.ru_stime.tv_usec/1000000, - (float)c_ru.ru_utime.tv_sec+(float)c_ru.ru_utime.tv_usec/1000000, - (float)c_ru.ru_stime.tv_sec+(float)c_ru.ru_stime.tv_usec/1000000); + (float)self_ru.ru_utime.tv_sec+(float)self_ru.ru_utime.tv_usec/1000000, + (float)c_ru.ru_stime.tv_sec+(float)c_ru.ru_stime.tv_usec/1000000, + (float)c_ru.ru_utime.tv_sec+(float)c_ru.ru_utime.tv_usec/1000000); } /* cmdtime */