Switch to the new afs.
[paraslash.git] / mysql_selector.c
index 702e08d3478a4f2c4c995ba4bc6dda68210a0b04..5b145dcab95be77e4fad029c2bc52cc9b6f3617d 100644 (file)
 /** \endcond */
 
 #include "para.h"
+#include "error.h"
+#include "string.h"
 #include "server.cmdline.h"
 #include "afh.h"
+#include "afs.h"
 #include "server.h"
 #include "vss.h"
 #include "afs_common.h"
 #include <mysql/mysql.h>
 #include <mysql/mysql_version.h>
 #include <regex.h>
-#include "error.h"
 #include "net.h"
-#include "string.h"
+#include "list.h"
 #include "user_list.h"
 #include "mysql_selector_command_list.h"
 #include "ipc.h"
@@ -265,7 +267,7 @@ static char *escaped_basename(const char *name)
 /*
  * new attribute
  */
-int com_na(__a_unused int fd, int argc, char *argv[])
+int com_na(__a_unused int fd, int argc, char * const * argv)
 {
        char *q, *tmp;
        int ret;
@@ -286,7 +288,7 @@ int com_na(__a_unused int fd, int argc, char *argv[])
 /*
  * delete attribute
  */
-int com_da(__a_unused int fd, int argc, char *argv[])
+int com_da(__a_unused int fd, int argc, char * const * argv)
 {
        char *q, *tmp;
        int ret;
@@ -304,7 +306,7 @@ int com_da(__a_unused int fd, int argc, char *argv[])
 }
 
 /* stradd/pic_add */
-static int com_stradd_picadd(int fd, int argc, char *argv[])
+static int com_stradd_picadd(int fd, int argc, char * const * argv)
 {
        char *blob = NULL, *esc_blob = NULL, *q = NULL, *tmp = NULL;
        const char *fmt, *del_fmt;
@@ -360,13 +362,13 @@ out:
 }
 
 /* stradd */
-int com_stradd(int fd, int argc, char *argv[])
+int com_stradd(int fd, int argc, char * const * argv)
 {
        return com_stradd_picadd(fd, argc, argv);
 }
 
 /* pic_add */
-int com_picadd(int fd, int argc, char *argv[])
+int com_picadd(int fd, int argc, char * const * argv)
 {
        return com_stradd_picadd(fd, argc, argv);
 }
@@ -402,7 +404,7 @@ static int print_results(int fd, void *result,
 /*
  * verbatim
  */
-int com_verb(int fd, int argc, char *argv[])
+int com_verb(int fd, int argc, char * const * argv)
 {
        void *result = NULL;
        int ret;
@@ -449,7 +451,7 @@ static void *get_all_attributes(void)
 /*
  * list all attributes
  */
-int com_laa(int fd, int argc, __a_unused char *argv[])
+int com_laa(int fd, int argc, __a_unused char * const * argv)
 {
        void *result;
        int ret;
@@ -472,7 +474,7 @@ int com_laa(int fd, int argc, __a_unused char *argv[])
 /*
  * history
  */
-int com_hist(int fd, int argc, char *argv[])
+int com_hist(int fd, int argc, char * const * argv)
 {
        int ret;
        void *result = NULL;
@@ -508,7 +510,7 @@ int com_hist(int fd, int argc, char *argv[])
 /*
  * get last num audio files
  */
-int com_last(int fd, int argc, char *argv[])
+int com_last(int fd, int argc, char * const * argv)
 {
        void *result = NULL;
        char *q;
@@ -533,7 +535,7 @@ int com_last(int fd, int argc, char *argv[])
        return ret;
 }
 
-int com_mbox(int fd, int argc, char *argv[])
+int com_mbox(int fd, int argc, char * const * argv)
 {
        void *result;
        MYSQL_ROW row;
@@ -739,7 +741,7 @@ err_out:
  * If filename is NULL, query will list everything, otherwise only
  * the score of given file.
  */
-static char *get_query(char *streamname, char *filename, int with_path)
+static char *get_query(const char *streamname, char *filename, int with_path)
 {
        char *accept_opts = NULL, *deny_opts = NULL, *score = NULL;
        char *where_clause, *order, *query;
@@ -950,7 +952,7 @@ static void refresh_selector_info(void)
 }
 
 /* list attributes / print database info */
-static int com_la_info(int fd, int argc, char *argv[])
+static int com_la_info(int fd, int argc, char * const * argv)
 {
        char *name = NULL, *meta = NULL, *atts = NULL, *dir = NULL;
        int ret, la = strcmp(argv[0], "info");
@@ -984,13 +986,13 @@ out:
 }
 
 /* list attributes */
-int com_la(int fd, int argc, char *argv[])
+int com_la(int fd, int argc, char * const * argv)
 {
        return com_la_info(fd, argc, argv);
 }
 
 /* print database info */
-int com_info(int fd, int argc, char *argv[])
+int com_info(int fd, int argc, char * const * argv)
 {
        return com_la_info(fd, argc, argv);
 }
@@ -1090,7 +1092,7 @@ out:
 /*
  * remove/add entries
  */
-static int com_rm_ne(__a_unused int fd, int argc, char *argv[])
+static int com_rm_ne(__a_unused int fd, int argc, char * const * argv)
 {
        int ne = !strcmp(argv[0], "ne");
        int i, ret;
@@ -1112,7 +1114,7 @@ static int com_rm_ne(__a_unused int fd, int argc, char *argv[])
 /*
  * rm
  */
-int com_rm(int fd, int argc, char *argv[])
+int com_rm(int fd, int argc, char * const * argv)
 {
        return com_rm_ne(fd, argc, argv);
 }
@@ -1120,7 +1122,7 @@ int com_rm(int fd, int argc, char *argv[])
 /*
  * ne
  */
-int com_ne(int fd, int argc, char *argv[])
+int com_ne(int fd, int argc, char * const * argv)
 {
        return com_ne(fd, argc, argv);
 }
@@ -1128,7 +1130,7 @@ int com_ne(int fd, int argc, char *argv[])
 /*
  * mv: rename entry
  */
-int com_mv(__a_unused int fd, int argc, char *argv[])
+int com_mv(__a_unused int fd, int argc, char * const * argv)
 {
        char *q, *dn, *ebn1 = NULL, *ebn2 = NULL, *edn = NULL;
        int ret;
@@ -1186,7 +1188,7 @@ out:
 /*
  * set field
  */
-static int com_set(__a_unused int fd, int argc, char *argv[])
+static int com_set(__a_unused int fd, int argc, char * const * argv)
 {
        char *q, *ebn;
        long unsigned id;
@@ -1214,7 +1216,7 @@ static int com_set(__a_unused int fd, int argc, char *argv[])
 /*
  * snp: set numplayed
  */
-int com_picass(int fd, int argc, char *argv[])
+int com_picass(int fd, int argc, char * const * argv)
 {
        return com_set(fd, argc, argv);
 }
@@ -1222,7 +1224,7 @@ int com_picass(int fd, int argc, char *argv[])
 /*
  * snp: set numplayed
  */
-int com_snp(int fd, int argc, char *argv[])
+int com_snp(int fd, int argc, char * const * argv)
 {
        int ret = com_set(fd, argc, argv);
        if (ret >= 0)
@@ -1233,7 +1235,7 @@ int com_snp(int fd, int argc, char *argv[])
 /*
  * picch: change entry's name in pics table
  */
-int com_picch(__a_unused int fd, int argc, char *argv[])
+int com_picch(__a_unused int fd, int argc, char * const * argv)
 {
        int ret;
        long unsigned id;
@@ -1256,7 +1258,7 @@ int com_picch(__a_unused int fd, int argc, char *argv[])
 /*
  * piclist: print list of pics in db
  */
-int com_piclist(__a_unused int fd, int argc, __a_unused char *argv[])
+int com_piclist(__a_unused int fd, int argc, __a_unused char * const * argv)
 {
        void *result = NULL;
        MYSQL_ROW row;
@@ -1285,7 +1287,7 @@ out:
 /*
  * picdel: delete picture from database
  */
-int com_picdel(int fd, int argc, char *argv[])
+int com_picdel(int fd, int argc, char * const * argv)
 {
        char *q;
        long unsigned id;
@@ -1317,7 +1319,7 @@ int com_picdel(int fd, int argc, char *argv[])
 /*
  * pic: get picture by name or by number
  */
-int com_pic(int fd, int argc, char *argv[])
+int com_pic(int fd, int argc, char * const * argv)
 {
        void *result = NULL;
        MYSQL_ROW row;
@@ -1358,7 +1360,7 @@ out:
 }
 
 /* strdel */
-int com_strdel(__a_unused int fd, int argc, char *argv[])
+int com_strdel(__a_unused int fd, int argc, char * const * argv)
 {
        char *q, *tmp;
        int ret;
@@ -1378,7 +1380,7 @@ int com_strdel(__a_unused int fd, int argc, char *argv[])
 /*
  * ls
  */
-int com_ls(int fd, int argc, char *argv[])
+int com_ls(int fd, int argc, char * const * argv)
 {
        char *q;
        void *result;
@@ -1411,7 +1413,7 @@ int com_ls(int fd, int argc, char *argv[])
 /*
  * summary
  */
-int com_summary(__a_unused int fd, int argc, __a_unused char *argv[])
+int com_summary(__a_unused int fd, int argc, __a_unused char * const * argv)
 {
        MYSQL_ROW row;
        MYSQL_ROW row2;
@@ -1477,7 +1479,7 @@ out:
        return ret;
 }
 
-static int update_audio_file(char *name)
+static int update_audio_file(const char *name)
 {
        int ret;
        const char *fmt1 = "update data set lastplayed = now() where name = '%s'";
@@ -1513,7 +1515,7 @@ static void update_audio_file_server_handler(char *name)
        update_audio_file(name);
 }
 
-int com_us(__a_unused int fd, int argc, char *argv[])
+int com_us(__a_unused int fd, int argc, char * const * argv)
 {
        char *tmp;
        int ret;
@@ -1531,7 +1533,7 @@ int com_us(__a_unused int fd, int argc, char *argv[])
 }
 
 /* select previous / next stream */
-static int com_ps_ns(__a_unused int fd, int argc, char *argv[])
+static int com_ps_ns(__a_unused int fd, int argc, char * const * argv)
 {
        char *query, *stream = get_current_stream();
        void *result = get_result("select name from streams");
@@ -1597,19 +1599,19 @@ out:
 }
 
 /* select previous stream */
-int com_ps(int fd, int argc, char *argv[])
+int com_ps(int fd, int argc, char * const * argv)
 {
        return com_ps_ns(fd, argc, argv);
 }
 
 /* select next stream */
-int com_ns(int fd, int argc, char *argv[])
+int com_ns(int fd, int argc, char * const * argv)
 {
        return com_ps_ns(fd, argc, argv);
 }
 
 /* streams */
-int com_streams(int fd, int argc, __a_unused char *argv[])
+int com_streams(int fd, int argc, __a_unused char * const * argv)
 {
        unsigned int num_rows;
        int i, ret = -E_NORESULT;
@@ -1647,7 +1649,7 @@ out:
 }
 
 /* query stream definition */
-int com_strq(int fd, int argc, char *argv[])
+int com_strq(int fd, int argc, char * const * argv)
 {
        MYSQL_ROW row;
        char *query, *name;
@@ -1683,7 +1685,7 @@ out:
 }
 
 /* change stream / change stream and play */
-static int com_cs_csp(int fd, int argc, char *argv[])
+static int com_cs_csp(int fd, int argc, char * const * argv)
 {
        int ret, stream_change;
        char *query, *stream = NULL;
@@ -1731,19 +1733,19 @@ out:
 }
 
 /* change stream */
-int com_cs(int fd, int argc, char *argv[])
+int com_cs(int fd, int argc, char * const * argv)
 {
        return com_cs_csp(fd, argc, argv);
 }
 
 /* change stream and play */
-int com_csp(int fd, int argc, char *argv[])
+int com_csp(int fd, int argc, char * const * argv)
 {
        return com_cs_csp(fd, argc, argv);
 }
 
 /* score list / skip */
-static int com_sl_skip(int fd, int argc, char *argv[])
+static int com_sl_skip(int fd, int argc, char * const * argv)
 {
        void *result = NULL;
        MYSQL_ROW row;
@@ -1796,13 +1798,13 @@ out:
 }
 
 /* score list */
-int com_sl(int fd, int argc, char *argv[])
+int com_sl(int fd, int argc, char * const * argv)
 {
        return com_sl_skip(fd, argc, argv);
 }
 
 /* skip */
-int com_skip(int fd, int argc, char *argv[])
+int com_skip(int fd, int argc, char * const * argv)
 {
        return com_sl_skip(fd, argc, argv);
 }
@@ -1810,7 +1812,7 @@ int com_skip(int fd, int argc, char *argv[])
 /*
  * update attributes of name
  */
-static int update_atts(int fd, char *name, char *atts)
+static int update_atts(int fd, const char *name, char *atts)
 {
        int ret;
        char *ebn, *q, *old, *new = NULL;
@@ -1839,7 +1841,7 @@ out:
 /*
  * set attributes
  */
-int com_sa(int fd, int argc, char *argv[])
+int com_sa(int fd, int argc, char * const * argv)
 {
        int i, ret;
        char *atts = NULL, *name;
@@ -1848,12 +1850,12 @@ int com_sa(int fd, int argc, char *argv[])
                return -E_MYSQL_SYNTAX;
        for (i = 1; i < argc; i++) {
                int unset = 0;
-               char *esc, *tmp, *p =argv[i];
-               int len = strlen(p);
+               char *esc, *tmp, *p;
+               int len = strlen(argv[i]);
 
                if (!len)
                        continue;
-               switch (p[len - 1]) {
+               switch (argv[i][len - 1]) {
                        case '+':
                                unset = 0;
                                break;
@@ -1863,8 +1865,10 @@ int com_sa(int fd, int argc, char *argv[])
                        default:
                                goto no_more_atts;
                }
+               p = para_strdup(argv[i]);
                p[len - 1] = '\0';
                esc = escape_str(p);
+               free(p);
                if (!esc)
                        return -E_ESCAPE;
                tmp = make_message("%s%s='%s'", atts? "," : "", esc,
@@ -1896,7 +1900,7 @@ out:
 /*
  * copy attributes
  */
-int com_cam(int fd, int argc, char *argv[])
+int com_cam(int fd, int argc, char * const * argv)
 {
        char *name = NULL, *meta = NULL, *atts = NULL;
        int i, ret;
@@ -1944,7 +1948,7 @@ out:
 /*
  * verify / clean
  */
-static int com_vrfy_clean(int fd, int argc, __a_unused char *argv[])
+static int com_vrfy_clean(int fd, int argc, __a_unused char * const * argv)
 {
        char *query;
        int ret, vrfy_mode = strcmp(argv[0], "clean");
@@ -1997,7 +2001,7 @@ out:
 /*
  * verify
  */
-int com_vrfy(int fd, int argc, char **argv)
+int com_vrfy(int fd, int argc, char * const * argv)
 {
        return com_vrfy_clean(fd, argc, argv);
 }
@@ -2005,7 +2009,7 @@ int com_vrfy(int fd, int argc, char **argv)
 /*
  * clean
  */
-int com_clean(int fd, int argc, char **argv)
+int com_clean(int fd, int argc, char * const * argv)
 {
        return com_vrfy_clean(fd, argc, argv);
 }
@@ -2025,7 +2029,7 @@ static int mysql_write_tmp_file(const char *dir, const char *name)
 /*
  * update database
  */
-int com_upd(int fd, int argc, __a_unused char *argv[])
+int com_upd(int fd, int argc, __a_unused char * const * argv)
 {
        char *tempname = NULL, *query = NULL;
        int ret, out_fd = -1, num = 0;
@@ -2196,7 +2200,7 @@ static void write_msg2mmd(int success)
 }
 
 /* create database */
-int com_cdb(int fd, int argc, char *argv[])
+int com_cdb(int fd, int argc, char * const * argv)
 {
        char *query;
        int ret;