# USA
#
-AC_INIT([disorder], [3.0+], [richard+disorder@sfere.greenend.org.uk])
+AC_INIT([disorder], [4.0+], [richard+disorder@sfere.greenend.org.uk])
AC_CONFIG_AUX_DIR([config.aux])
-AM_INIT_AUTOMAKE(disorder, [3.0+])
+AM_INIT_AUTOMAKE(disorder, [4.0+])
AC_CONFIG_SRCDIR([server/disorderd.c])
AM_CONFIG_HEADER([config.h])
AC_SET_MAKE
if test "x$GCC" = xyes; then
gcc_werror=-Werror
+ case "$CC" in
+ *-std=* )
+ ;;
+ * )
+ CC="${CC} -std=gnu99"
+ ;;
+ esac
else
AC_MSG_ERROR([GNU C is required to build this program])
gcc_werror=""
fi
done
])
- if test "$rjk_cv_cgidir" = "not found"; then
+ if test "$rjk_cv_cgiexecdir" = "not found"; then
AC_MSG_ERROR([cannot identify httpd documentroot. Set httpdir on configure command line])
fi
httpdir="$rjk_cv_httpdir"
fi
- if test -z "$cgidir"; then
- AC_CACHE_CHECK([for CGI directory],[rjk_cv_cgidir],[
- rjk_cv_cgidir="not found"
+ if test ! -z "$cgidir"; then
+ # This is a bit harsh but should stop any disasters
+ AC_MSG_ERROR([cgidir has been renamed to cgiexecdir])
+ fi
+ if test -z "$cgiexecdir"; then
+ AC_CACHE_CHECK([for CGI directory],[rjk_cv_cgiexecdir],[
+ rjk_cv_cgiexecdir="not found"
for dir in /usr/lib/cgi-bin \
/Library/WebServer/CGI-Executables \
/srv/www/cgi-bin \
/usr/local/www/cgi-bin \
/usr/local/www/*/cgi-bin; do
if test -d "$dir"; then
- rjk_cv_cgidir="$dir"
+ rjk_cv_cgiexecdir="$dir"
break
fi
done
])
- if test "$rjk_cv_cgidir" = "not found"; then
- AC_MSG_ERROR([cannot identify CGI install directory. Set cgidir on configure command line])
+ if test "$rjk_cv_cgiexecdir" = "not found"; then
+ AC_MSG_ERROR([cannot identify CGI install directory. Set cgiexecdir on configure command line])
fi
- cgidir="$rjk_cv_cgidir"
+ cgiexecdir="$rjk_cv_cgiexecdir"
fi
fi
-AC_ARG_VAR([cgidir], [location of cgi-bin directory, e.g. /usr/lib/cgi-bin])
+AC_ARG_VAR([cgiexecdir], [location of cgi-bin directory, e.g. /usr/lib/cgi-bin])
AC_ARG_VAR([httpdir], [location of http document root, e.g. /var/www/htdocs])
if test -z "$pkghttpdir"; then
pkghttpdir='$(httpdir)/disorder'
char *ptr;
int err;
size_t l, last_dir_len = 0;
- char *last_dir = 0, *track, *alias;
+ char *last_dir = 0, *track;
struct kvp *p;
dl = strlen(dir);
if((err = trackdb_getdata(trackdb_prefsdb,
track, &p, tid)) == DB_LOCK_DEADLOCK)
goto deadlocked;
+ /* There's an awkward question here...
+ *
+ * If a track shares a directory with its alias then we could
+ * do one of three things:
+ * - report both. Looks ridiculuous in most UIs.
+ * - report just the alias. Remarkably inconvenient to write
+ * UI code for!
+ * - report just the real name. Ugly if the UI doesn't prettify
+ * names via the name parts.
+ */
+#if 1
+ /* If this file is an alias for a track in the same directory then we
+ * skip it */
+ struct kvp *t = kvp_urldecode(d.data, d.size);
+ const char *alias_target = kvp_get(t, "_alias_for");
+ if(!(alias_target
+ && !strcmp(d_dirname(alias_target),
+ d_dirname(track))))
+ if(track_matches(dl, k.data, k.size, re))
+ vector_append(v, track);
+#else
/* if this file has an alias in the same directory then we skip it */
+ char *alias;
if((err = compute_alias(&alias, track, p, tid)))
goto deadlocked;
if(!(alias && !strcmp(d_dirname(alias), d_dirname(track))))
if(track_matches(dl, k.data, k.size, re))
vector_append(v, track);
+#endif
}
}
err = cursor->c_get(cursor, &k, &d, DB_NEXT);
* @return null-terminated array of track names, or NULL on deadlock
*
* The most recently added track is first in the array.
+ *
+ * TODO: exclude tracks that have been deleted again.
+ *
*/
static char **trackdb_new_tid(int *ntracksp,
int maxtracks,
user, rights, email);
else
info("created user '%s' with rights '%s'", user, rights);
+ eventlog("user_add", user, (char *)0);
return 0;
}
}
return -1;
}
info("deleted user '%s'", user);
+ eventlog("user_delete", user, (char *)0);
return 0;
}
if(e) {
error(0, "unknown user '%s'", user);
return -1;
- } else
+ } else {
+ eventlog("user_edit", user, key, (char *)0);
return 0;
+ }
}
/** @brief List all users
switch(e) {
case 0:
info("registration confirmed for user '%s'", user);
+ eventlog("user_confirm", user, (char *)0);
return 0;
case DB_NOTFOUND:
error(0, "confirmation for nonexistent user '%s'", user);