Mercurial > noffle
view src/control.c @ 288:c02c4eb95f95 noffle
[svn] * src/configfile.h,src/configfile.c,docs/noffle.conf.5: Add noffle-user
and noffle-group configs.
* src/configfile.c,src/fetch.c,src/fetchlist.c,src/protocol.c,
src/server.c: Replace strcpy() with Utl_cpyStr() where appropriate.
See Debian bug 168128.
* src/control.c,src/configfile.c,src/noffle.c: Replace [s]scanf("%s")
with [s]scanf(MAXCHAR_FMT).
* src/noffle.c: Log warning if noffle.conf is world readable.
* src/noffle.c: Restrict most options to news admins; i.e. those who
are root or news on running Noffle.
* Makefile.in,acconfig.h,aclocal.m4,config.h.in,configure,configure.in,
docs/Makefile.in,docs/noffle.conf.5,packages/Makefile.in,
packages/redhat/Makefile.in,src/Makefile.am,src/Makefile.in,
src/authenticate.c,src/authenticate.h,src/noffle.c,src/server.c:
Add basic authentication using either Noffle-specific user file
or authenticating via PAM (service 'noffle'). PAM authentication
needs to run as root, so a Noffle server that needs PAM
must be started by root. Helpful (?) error messages will be logged
if not. Noffle will switch ruid and euid to 'news' (or whatever
is configured) ASAP.
* src/noffle.c: Add uid checking.
author | bears |
---|---|
date | Fri, 10 Jan 2003 23:25:45 +0000 |
parents | 01755687c565 |
children | 21300895412f |
line wrap: on
line source
/* control.c $Id: control.c 419 2003-01-10 23:11:43Z bears $ */ #if HAVE_CONFIG_H #include <config.h> #endif #include <stdio.h> #include "common.h" #include "content.h" #include "control.h" #include "database.h" #include "group.h" #include "itemlist.h" #include "log.h" #include "outgoing.h" #include "portable.h" int Ctrl_cancel( const char *msgId ) { ItemList *refs; const char *ref; Str server; Bool seen = FALSE; int res = CANCEL_OK; Bool removeFromDb = TRUE; /* See if in outgoing and zap if so. */ if ( Out_find( msgId, server ) ) { Out_remove( server, msgId ); Log_inf( "'%s' cancelled from outgoing queue for '%s'.\n", msgId, server ); seen = TRUE; } if ( ! Db_contains( msgId ) ) { Log_inf( "Cancel: '%s' not in database.", msgId ); return seen ? CANCEL_OK : CANCEL_NO_SUCH_MSG; } /* Retrieve the Xrefs, remove from each group and then remove from the database. */ refs = new_Itl( Db_xref( msgId ), " " ); for( ref = Itl_first( refs ); ref != NULL; ref = Itl_next( refs ) ) { Str grp; int no; if ( sscanf( ref, MAXCHAR_FMT ":%d", grp, &no ) != 2 ) break; if ( Grp_exists( grp ) ) { Cont_read( grp ); Cont_delete( no ); /* * If we don't manage to remove the overview, leave the message * in the main database to avoid confusion. Yes, the message * will not be cancelled properly for this group but we don't * signal this to the calling routine. */ if ( Cont_write() ) Log_dbg( LOG_DBG_CONTROL, "Removed '%s' from group '%s'.", msgId, grp ); else removeFromDb = FALSE; if ( ! Grp_local( grp ) && ! seen ) res = CANCEL_NEEDS_MSG; } else { Log_inf( "Group '%s' in Xref for '%s' not found.", grp, msgId ); } } del_Itl( refs ); if ( removeFromDb ) Db_delete( msgId ); Log_inf( "Message '%s' cancelled.", msgId ); return res; }