aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/client.c4
-rw-r--r--src/command.c161
-rw-r--r--src/command.h5
3 files changed, 86 insertions, 84 deletions
diff --git a/src/client.c b/src/client.c
index 6b3be05d0..f0603b3bb 100644
--- a/src/client.c
+++ b/src/client.c
@@ -337,7 +337,6 @@ static int client_process_line(struct client *client)
DEBUG("client %i: process command "
"list\n", client->num);
ret = processListOfCommands(client,
- &(client->permission),
client->cmd_list_OK,
client->cmd_list);
DEBUG("client %i: process command "
@@ -384,8 +383,7 @@ static int client_process_line(struct client *client)
} else {
DEBUG("client %i: process command \"%s\"\n",
client->num, line);
- ret = processCommand(client,
- &(client->permission), line);
+ ret = processCommand(client, line);
DEBUG("client %i: command returned %i\n",
client->num, ret);
diff --git a/src/command.c b/src/command.c
index 381efad68..390908d30 100644
--- a/src/command.c
+++ b/src/command.c
@@ -126,9 +126,9 @@
typedef struct _CommandEntry CommandEntry;
-typedef int (*CommandHandlerFunction) (struct client *, int *, int, char **);
+typedef int (*CommandHandlerFunction) (struct client *, int, char **);
typedef int (*CommandListHandlerFunction)
- (struct client *, int *, int, char **, struct strnode *, CommandEntry *);
+ (struct client *, int, char **, struct strnode *, CommandEntry *);
/* if min: -1 don't check args *
* if max: -1 no max args */
@@ -297,20 +297,20 @@ static void addCommand(const char *name,
insertInList(commandList, cmd->cmd, cmd);
}
-static int handleUrlHandlers(struct client *client, mpd_unused int *permission,
+static int handleUrlHandlers(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
return printRemoteUrlHandlers(client);
}
-static int handleTagTypes(struct client *client, mpd_unused int *permission,
+static int handleTagTypes(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
tag_print_types(client);
return 0;
}
-static int handlePlay(struct client *client, mpd_unused int *permission,
+static int handlePlay(struct client *client,
int argc, char *argv[])
{
int song = -1;
@@ -322,7 +322,7 @@ static int handlePlay(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handlePlayId(struct client *client, mpd_unused int *permission,
+static int handlePlayId(struct client *client,
int argc, char *argv[])
{
int id = -1;
@@ -335,14 +335,14 @@ static int handlePlayId(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleStop(mpd_unused struct client *client, mpd_unused int *permission,
+static int handleStop(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
stopPlaylist();
return 0;
}
-static int handleCurrentSong(struct client *client, mpd_unused int *permission,
+static int handleCurrentSong(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
int song = getPlaylistCurrentSong();
@@ -355,7 +355,7 @@ static int handleCurrentSong(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handlePause(struct client *client, mpd_unused int *permission,
+static int handlePause(struct client *client,
int argc, char *argv[])
{
if (argc == 2) {
@@ -370,7 +370,7 @@ static int handlePause(struct client *client, mpd_unused int *permission,
return 0;
}
-static int commandStatus(struct client *client, mpd_unused int *permission,
+static int commandStatus(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
const char *state = NULL;
@@ -439,19 +439,19 @@ static int commandStatus(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handleKill(mpd_unused struct client *client, mpd_unused int *permission,
+static int handleKill(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
return COMMAND_RETURN_KILL;
}
-static int handleClose(mpd_unused struct client *client, mpd_unused int *permission,
+static int handleClose(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
return COMMAND_RETURN_CLOSE;
}
-static int handleAdd(struct client *client, mpd_unused int *permission,
+static int handleAdd(struct client *client,
mpd_unused int argc, char *argv[])
{
char *path = argv[1];
@@ -470,7 +470,7 @@ static int handleAdd(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleAddId(struct client *client, mpd_unused int *permission,
+static int handleAddId(struct client *client,
int argc, char *argv[])
{
int added_id;
@@ -496,7 +496,7 @@ static int handleAddId(struct client *client, mpd_unused int *permission,
return result;
}
-static int handleDelete(struct client *client, mpd_unused int *permission,
+static int handleDelete(struct client *client,
mpd_unused int argc, char *argv[])
{
int song;
@@ -509,7 +509,7 @@ static int handleDelete(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleDeleteId(struct client *client, mpd_unused int *permission,
+static int handleDeleteId(struct client *client,
mpd_unused int argc, char *argv[])
{
int id;
@@ -522,7 +522,7 @@ static int handleDeleteId(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handlePlaylist(struct client *client, mpd_unused int *permission,
+static int handlePlaylist(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
showPlaylist(client);
@@ -530,21 +530,20 @@ static int handlePlaylist(struct client *client, mpd_unused int *permission,
}
static int handleShuffle(mpd_unused struct client *client,
- mpd_unused int *permission,
mpd_unused int argc, mpd_unused char *argv[])
{
shufflePlaylist();
return 0;
}
-static int handleClear(mpd_unused struct client *client, mpd_unused int *permission,
+static int handleClear(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
clearPlaylist();
return 0;
}
-static int handleSave(struct client *client, mpd_unused int *permission,
+static int handleSave(struct client *client,
mpd_unused int argc, char *argv[])
{
enum playlist_result result;
@@ -553,7 +552,7 @@ static int handleSave(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleLoad(struct client *client, mpd_unused int *permission,
+static int handleLoad(struct client *client,
mpd_unused int argc, char *argv[])
{
enum playlist_result result;
@@ -562,7 +561,7 @@ static int handleLoad(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleListPlaylist(struct client *client, mpd_unused int *permission,
+static int handleListPlaylist(struct client *client,
mpd_unused int argc, char *argv[])
{
int ret;
@@ -574,7 +573,7 @@ static int handleListPlaylist(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleListPlaylistInfo(struct client *client, mpd_unused int *permission,
+static int handleListPlaylistInfo(struct client *client,
mpd_unused int argc, char *argv[])
{
int ret;
@@ -586,7 +585,7 @@ static int handleListPlaylistInfo(struct client *client, mpd_unused int *permiss
return ret;
}
-static int handleLsInfo(struct client *client, mpd_unused int *permission,
+static int handleLsInfo(struct client *client,
int argc, char *argv[])
{
const char *path = "";
@@ -606,7 +605,7 @@ static int handleLsInfo(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handleRm(struct client *client, mpd_unused int *permission,
+static int handleRm(struct client *client,
mpd_unused int argc, char *argv[])
{
enum playlist_result result;
@@ -615,7 +614,7 @@ static int handleRm(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleRename(struct client *client, mpd_unused int *permission,
+static int handleRename(struct client *client,
mpd_unused int argc, char *argv[])
{
enum playlist_result result;
@@ -624,7 +623,7 @@ static int handleRename(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handlePlaylistChanges(struct client *client, mpd_unused int *permission,
+static int handlePlaylistChanges(struct client *client,
mpd_unused int argc, char *argv[])
{
mpd_uint32 version;
@@ -634,7 +633,7 @@ static int handlePlaylistChanges(struct client *client, mpd_unused int *permissi
return playlistChanges(client, version);
}
-static int handlePlaylistChangesPosId(struct client *client, mpd_unused int *permission,
+static int handlePlaylistChangesPosId(struct client *client,
mpd_unused int argc, char *argv[])
{
mpd_uint32 version;
@@ -644,7 +643,7 @@ static int handlePlaylistChangesPosId(struct client *client, mpd_unused int *per
return playlistChangesPosId(client, version);
}
-static int handlePlaylistInfo(struct client *client, mpd_unused int *permission,
+static int handlePlaylistInfo(struct client *client,
int argc, char *argv[])
{
int song = -1;
@@ -657,7 +656,7 @@ static int handlePlaylistInfo(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handlePlaylistId(struct client *client, mpd_unused int *permission,
+static int handlePlaylistId(struct client *client,
int argc, char *argv[])
{
int id = -1;
@@ -670,7 +669,7 @@ static int handlePlaylistId(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleFind(struct client *client, mpd_unused int *permission,
+static int handleFind(struct client *client,
int argc, char *argv[])
{
int ret;
@@ -695,7 +694,7 @@ static int handleFind(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleSearch(struct client *client, mpd_unused int *permission,
+static int handleSearch(struct client *client,
int argc, char *argv[])
{
int ret;
@@ -720,7 +719,7 @@ static int handleSearch(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleCount(struct client *client, mpd_unused int *permission,
+static int handleCount(struct client *client,
int argc, char *argv[])
{
int ret;
@@ -745,7 +744,7 @@ static int handleCount(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handlePlaylistFind(struct client *client, mpd_unused int *permission,
+static int handlePlaylistFind(struct client *client,
int argc, char *argv[])
{
LocateTagItem *items;
@@ -765,7 +764,7 @@ static int handlePlaylistFind(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handlePlaylistSearch(struct client *client, mpd_unused int *permission,
+static int handlePlaylistSearch(struct client *client,
int argc, char *argv[])
{
LocateTagItem *items;
@@ -785,7 +784,7 @@ static int handlePlaylistSearch(struct client *client, mpd_unused int *permissio
return 0;
}
-static int handlePlaylistDelete(struct client *client, mpd_unused int *permission,
+static int handlePlaylistDelete(struct client *client,
mpd_unused int argc, char *argv[]) {
char *playlist = argv[1];
int from;
@@ -798,7 +797,7 @@ static int handlePlaylistDelete(struct client *client, mpd_unused int *permissio
return print_playlist_result(client, result);
}
-static int handlePlaylistMove(struct client *client, mpd_unused int *permission,
+static int handlePlaylistMove(struct client *client,
mpd_unused mpd_unused int argc, char *argv[])
{
char *playlist = argv[1];
@@ -815,7 +814,6 @@ static int handlePlaylistMove(struct client *client, mpd_unused int *permission,
}
static int listHandleUpdate(struct client *client,
- mpd_unused int *permission,
mpd_unused int argc,
char *argv[],
struct strnode *cmdnode, CommandEntry * cmd)
@@ -833,7 +831,8 @@ static int listHandleUpdate(struct client *client,
insertInList(pathList, "", NULL);
if (next)
- nextCmd = getCommandEntryFromString(next->data, *permission);
+ nextCmd = getCommandEntryFromString(next->data,
+ client_get_permission(client));
if (cmd != nextCmd) {
int ret = updateInit(pathList);
@@ -863,7 +862,7 @@ static int listHandleUpdate(struct client *client,
return 0;
}
-static int handleUpdate(struct client *client, mpd_unused int *permission,
+static int handleUpdate(struct client *client,
mpd_unused int argc, char *argv[])
{
int ret;
@@ -897,21 +896,21 @@ static int handleUpdate(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleNext(mpd_unused struct client *client, mpd_unused int *permission,
+static int handleNext(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
nextSongInPlaylist();
return 0;
}
-static int handlePrevious(mpd_unused struct client *client, mpd_unused int *permission,
+static int handlePrevious(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
previousSongInPlaylist();
return 0;
}
-static int handleListAll(struct client *client, mpd_unused int *permission,
+static int handleListAll(struct client *client,
mpd_unused int argc, char *argv[])
{
char *directory = NULL;
@@ -928,7 +927,7 @@ static int handleListAll(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleVolume(struct client *client, mpd_unused int *permission,
+static int handleVolume(struct client *client,
mpd_unused int argc, char *argv[])
{
int change, ret;
@@ -944,7 +943,7 @@ static int handleVolume(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleSetVol(struct client *client, mpd_unused int *permission,
+static int handleSetVol(struct client *client,
mpd_unused int argc, char *argv[])
{
int level, ret;
@@ -960,7 +959,7 @@ static int handleSetVol(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleRepeat(struct client *client, mpd_unused int *permission,
+static int handleRepeat(struct client *client,
mpd_unused int argc, char *argv[])
{
int status;
@@ -978,7 +977,7 @@ static int handleRepeat(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handleRandom(struct client *client, mpd_unused int *permission,
+static int handleRandom(struct client *client,
mpd_unused int argc, char *argv[])
{
int status;
@@ -996,20 +995,20 @@ static int handleRandom(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handleStats(struct client *client, mpd_unused int *permission,
+static int handleStats(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
return printStats(client);
}
-static int handleClearError(mpd_unused struct client *client, mpd_unused int *permission,
+static int handleClearError(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
clearPlayerError();
return 0;
}
-static int handleList(struct client *client, mpd_unused int *permission,
+static int handleList(struct client *client,
int argc, char *argv[])
{
int numConditionals;
@@ -1063,7 +1062,7 @@ static int handleList(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleMove(struct client *client, mpd_unused int *permission,
+static int handleMove(struct client *client,
mpd_unused int argc, char *argv[])
{
int from, to;
@@ -1077,7 +1076,7 @@ static int handleMove(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleMoveId(struct client *client, mpd_unused int *permission,
+static int handleMoveId(struct client *client,
mpd_unused int argc, char *argv[])
{
int id, to;
@@ -1091,7 +1090,7 @@ static int handleMoveId(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleSwap(struct client *client, mpd_unused int *permission,
+static int handleSwap(struct client *client,
mpd_unused int argc, char *argv[])
{
int song1, song2;
@@ -1105,7 +1104,7 @@ static int handleSwap(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleSwapId(struct client *client, mpd_unused int *permission,
+static int handleSwapId(struct client *client,
mpd_unused int argc, char *argv[])
{
int id1, id2;
@@ -1119,7 +1118,7 @@ static int handleSwapId(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleSeek(struct client *client, mpd_unused int *permission,
+static int handleSeek(struct client *client,
mpd_unused int argc, char *argv[])
{
int song, seek_time;
@@ -1134,7 +1133,7 @@ static int handleSeek(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleSeekId(struct client *client, mpd_unused int *permission,
+static int handleSeekId(struct client *client,
mpd_unused int argc, char *argv[])
{
int id, seek_time;
@@ -1149,7 +1148,7 @@ static int handleSeekId(struct client *client, mpd_unused int *permission,
return print_playlist_result(client, result);
}
-static int handleListAllInfo(struct client *client, mpd_unused int *permission,
+static int handleListAllInfo(struct client *client,
mpd_unused int argc, char *argv[])
{
char *directory = NULL;
@@ -1166,24 +1165,28 @@ static int handleListAllInfo(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handlePing(mpd_unused struct client *client, mpd_unused int *permission,
+static int handlePing(mpd_unused struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
return 0;
}
-static int handlePassword(struct client *client, mpd_unused int *permission,
+static int handlePassword(struct client *client,
mpd_unused int argc, char *argv[])
{
- if (getPermissionFromPassword(argv[1], permission) < 0) {
+ int permission = 0;
+
+ if (getPermissionFromPassword(argv[1], &permission) < 0) {
command_error(client, ACK_ERROR_PASSWORD, "incorrect password");
return -1;
}
+ client_set_permission(client, permission);
+
return 0;
}
-static int handleCrossfade(struct client *client, mpd_unused int *permission,
+static int handleCrossfade(struct client *client,
mpd_unused int argc, char *argv[])
{
int xfade_time;
@@ -1195,7 +1198,7 @@ static int handleCrossfade(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handleEnableDevice(struct client *client, mpd_unused int *permission,
+static int handleEnableDevice(struct client *client,
mpd_unused int argc, char *argv[])
{
int device, ret;
@@ -1211,7 +1214,7 @@ static int handleEnableDevice(struct client *client, mpd_unused int *permission,
return ret;
}
-static int handleDisableDevice(struct client *client, mpd_unused int *permission,
+static int handleDisableDevice(struct client *client,
mpd_unused int argc, char *argv[])
{
int device, ret;
@@ -1227,7 +1230,7 @@ static int handleDisableDevice(struct client *client, mpd_unused int *permission
return ret;
}
-static int handleDevices(struct client *client, mpd_unused int *permission,
+static int handleDevices(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
printAudioDevices(client);
@@ -1236,15 +1239,16 @@ static int handleDevices(struct client *client, mpd_unused int *permission,
}
/* don't be fooled, this is the command handler for "commands" command */
-static int handleCommands(struct client *client, mpd_unused int *permission,
+static int handleCommands(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
+ const int permission = client_get_permission(client);
ListNode *node = commandList->firstNode;
CommandEntry *cmd;
while (node != NULL) {
cmd = (CommandEntry *) node->data;
- if (cmd->reqPermission == (*permission & cmd->reqPermission)) {
+ if (cmd->reqPermission == (permission & cmd->reqPermission)) {
client_printf(client, "command: %s\n", cmd->cmd);
}
@@ -1254,16 +1258,17 @@ static int handleCommands(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handleNotcommands(struct client *client, mpd_unused int *permission,
+static int handleNotcommands(struct client *client,
mpd_unused int argc, mpd_unused char *argv[])
{
+ const int permission = client_get_permission(client);
ListNode *node = commandList->firstNode;
CommandEntry *cmd;
while (node != NULL) {
cmd = (CommandEntry *) node->data;
- if (cmd->reqPermission != (*permission & cmd->reqPermission)) {
+ if (cmd->reqPermission != (permission & cmd->reqPermission)) {
client_printf(client, "command: %s\n", cmd->cmd);
}
@@ -1273,7 +1278,7 @@ static int handleNotcommands(struct client *client, mpd_unused int *permission,
return 0;
}
-static int handlePlaylistClear(struct client *client, mpd_unused int *permission,
+static int handlePlaylistClear(struct client *client,
mpd_unused int argc, char *argv[])
{
enum playlist_result result;
@@ -1282,7 +1287,7 @@ static int handlePlaylistClear(struct client *client, mpd_unused int *permission
return print_playlist_result(client, result);
}
-static int handlePlaylistAdd(struct client *client, mpd_unused int *permission,
+static int handlePlaylistAdd(struct client *client,
mpd_unused int argc, char *argv[])
{
char *playlist = argv[1];
@@ -1462,7 +1467,6 @@ static CommandEntry *getCommandEntryFromString(char *string, int permission)
}
static int processCommandInternal(struct client *client,
- mpd_unused int *permission,
char *commandString, struct strnode *cmdnode)
{
int argc;
@@ -1475,12 +1479,13 @@ static int processCommandInternal(struct client *client,
if (argc == 0)
return 0;
- if ((cmd = getCommandEntryAndCheckArgcAndPermission(client, *permission,
+ if ((cmd = getCommandEntryAndCheckArgcAndPermission(client,
+ client_get_permission(client),
argc, argv))) {
if (!cmdnode || !cmd->listHandler) {
- ret = cmd->handler(client, permission, argc, argv);
+ ret = cmd->handler(client, argc, argv);
} else {
- ret = cmd->listHandler(client, permission, argc, argv,
+ ret = cmd->listHandler(client, argc, argv,
cmdnode, cmd);
}
}
@@ -1490,7 +1495,7 @@ static int processCommandInternal(struct client *client,
return ret;
}
-int processListOfCommands(struct client *client, int *permission,
+int processListOfCommands(struct client *client,
int listOK, struct strnode *list)
{
struct strnode *cur = list;
@@ -1501,7 +1506,7 @@ int processListOfCommands(struct client *client, int *permission,
while (cur) {
DEBUG("processListOfCommands: process command \"%s\"\n",
cur->data);
- ret = processCommandInternal(client, permission, cur->data, cur);
+ ret = processCommandInternal(client, cur->data, cur);
DEBUG("processListOfCommands: command returned %i\n", ret);
if (ret != 0 || client_is_expired(client))
goto out;
@@ -1515,7 +1520,7 @@ out:
return ret;
}
-int processCommand(struct client *client, int *permission, char *commandString)
+int processCommand(struct client *client, char *commandString)
{
- return processCommandInternal(client, permission, commandString, NULL);
+ return processCommandInternal(client, commandString, NULL);
}
diff --git a/src/command.h b/src/command.h
index 2b4f1fee7..13ec7df63 100644
--- a/src/command.h
+++ b/src/command.h
@@ -29,11 +29,10 @@
struct client;
-int processListOfCommands(struct client *client, int *permission,
+int processListOfCommands(struct client *client,
int listOK, struct strnode *list);
-int processCommand(struct client *client,
- int *permission, char *commandString);
+int processCommand(struct client *client, char *commandString);
void initCommands(void);