Exemple #1
0
int
LoadDisplayResources( struct display *d )
{
	int i, ret;
	char **ent;

	if (Setjmp( cnftalk.errjmp ))
		return -1; /* may memleak */
	if ((ret = startConfig( GC_gDisplay, &d->cfg.dep, FALSE )) <= 0)
		return ret;
	GSendStr( d->name );
	GSendStr( d->class2 );
	LoadResources( &d->cfg );
/*	Debug( "display(%s, %s) resources: %[*x\n", d->name, d->class2,
           d->cfg.numCfgEnt, ((char **)d->cfg.data) + d->cfg.numCfgEnt );*/
	ret = 1;
	for (i = 0; i < as(dpyVal); i++) {
		if (!(ent = FindCfgEnt( d, dpyVal[i].id )))
			ret = -1;
		else
			ApplyResource( dpyVal[i].id, ent,
			               (char **)(((char *)d) + dpyVal[i].off) );
	}
	if (ret < 0)
		LogError( "Internal error: config reader supplied incomplete data\n" );
	return ret;
}
Exemple #2
0
void KCheckPass::handleVerify()
{
    int ret;
    char *arr;

    if (GRecvInt( &ret )) {
        switch (ret) {
        case ConvGetBinary:
            if (!GRecvArr( &arr ))
                break;
            // FIXME: not supported
            cantCheck();
            if (arr)
                ::free( arr );
            return;
        case ConvGetNormal:
            if (!GRecvArr( &arr ))
                break;
            GSendStr(m_password.toUtf8().constData());
            if (!m_password.isEmpty()) {
                // IsSecret
                GSendInt(1);
            }
            if (arr)
                ::free( arr );
            return;
        case ConvGetHidden:
            if (!GRecvArr( &arr ))
                break;
            GSendStr(m_password.toUtf8().constData());
            if (!m_password.isEmpty()) {
                // IsSecret
                GSendInt(1);
            }
            if (arr)
                ::free( arr );
            return;
        case ConvPutInfo:
            if (!GRecvArr( &arr ))
                break;
            emit message(QString::fromLocal8Bit(arr));
            ::free( arr );
            return;
        case ConvPutError:
            if (!GRecvArr( &arr ))
                break;
            emit error(QString::fromLocal8Bit(arr));
            ::free( arr );
            return;
        }
    }
    reapVerify();
}
Exemple #3
0
void ChooserDlg::addHostname()
{
	if (!iline->text().isEmpty()) {
		GSendInt( G_Ch_RegisterHost );
		GSendStr( iline->text().latin1() );
		iline->clear();
	}
}
Exemple #4
0
static void
doShutdown( int type, const char *os )
{
	GSet( 1 );
	GSendInt( G_Shutdown );
	GSendInt( type );
	GSendInt( 0 );
	GSendInt( 0 );
	GSendInt( SHUT_FORCE );
	GSendInt( 0 ); /* irrelevant, will timeout immediately anyway */
	GSendStr( os );
	GSet( 0 );
}
Exemple #5
0
int
startConfig( int what, CfgDep *dep, int force )
{
	int ret;

	if ((ret = needsReScan( what, dep )) < 0 || (!ret && !force))
		return ret;
	OpenGetter();
	GSendInt( GC_GetConf );
	GSendInt( what );
	GSendStr( dep->name->str );
	return 1;
}
Exemple #6
0
void
TDMShutdown::accepted()
{
	GSet( 1 );
	GSendInt( G_Shutdown );
	GSendInt( restart_rb->isChecked() ? SHUT_REBOOT : SHUT_HALT );
	GSendInt( sch_st );
	GSendInt( sch_to );
	GSendInt( cb_force->isChecked() ? SHUT_FORCE : SHUT_CANCEL );
	GSendInt( _allowShutdown == SHUT_ROOT ? 0 : -2 );
	GSendStr( (restart_rb->isChecked() &&
	           targets && targets->currentItem() != oldTarget) ?
	          targets->currentText().local8Bit().data() : 0 );
	GSet( 0 );
	inherited::accepted();
}
Exemple #7
0
void ChooserDlg::accept()
{
	if (focusWidget() == iline) {
		if (!iline->text().isEmpty()) {
			GSendInt( G_Ch_DirectChoice );
			GSendStr( iline->text().latin1() );
			iline->clear();
		}
		return;
	} else /*if (focusWidget() == host_view)*/ {
		QListViewItem *item = host_view->currentItem();
		if (item) {
			GSendInt( G_Ready );
			GSendInt( ((ChooserListViewItem *)item)->id );
			::exit( EX_NORMAL );
		}
	}
}
Exemple #8
0
void Greeter::gplugReturnText( const char *text, int tag )
{
    GSendStr( text );
    if (text)
        GSendInt( tag );
}
Exemple #9
0
int main( int argc ATTR_UNUSED, char **argv )
{
	DSpec dspec;
	ValArr va;
	char *ci, *disp, *dcls, *cfgfile;
	int what;

	if (!(ci = getenv( "CONINFO" ))) {
		fprintf( stderr, "This program is part of kdm and should not be run manually.\n" );
		return 1;
	}
	if (sscanf( ci, "%d %d", &rfd, &wfd ) != 2)
		return 1;

	InitLog();

	if ((debugLevel = GRecvInt()) & DEBUG_WCONFIG)
		sleep( 100 );

/*	Debug ("parsing command line\n");*/
	if (**++argv)
		kdmrc = *argv;
/*
	while (*++argv) {
	}
*/

	for (;;) {
/*		Debug ("Awaiting command ...\n");*/
		if (!GRecvCmd( &what ))
			break;
		switch (what) {
		case GC_Files:
/*			Debug ("GC_Files\n");*/
			ReadConf();
			CopyValues( 0, &secGeneral, 0, C_CONFIG );
#ifdef XDMCP
			CopyValues( 0, &secXdmcp, 0, C_CONFIG );
			GSendInt( 2 );
#else
			GSendInt( 1 );
#endif
			GSendStr( kdmrc );
				GSendInt( -1 );
#ifdef XDMCP
			GSendNStr( VXaccess.ptr, VXaccess.len - 1 );
				GSendInt( 0 );
#endif
			for (; (what = GRecvInt()) != -1; )
				switch (what) {
				case GC_gGlobal:
				case GC_gDisplay:
					GSendInt( 0 );
					break;
#ifdef XDMCP
				case GC_gXaccess:
					GSendInt( 1 );
					break;
#endif
				default:
					GSendInt( -1 );
					break;
				}
			break;
		case GC_GetConf:
/*		Debug( "GC_GetConf\n" );*/
			memset( &va, 0, sizeof(va) );
			what = GRecvInt();
			cfgfile = GRecvStr();
			switch (what) {
			case GC_gGlobal:
/*		Debug( "GC_gGlobal\n" );*/
				Debug( "getting global config\n" );
				ReadConf();
				CopyValues( &va, &secGeneral, 0, 0 );
#ifdef XDMCP
				CopyValues( &va, &secXdmcp, 0, 0 );
#endif
				CopyValues( &va, &secShutdown, 0, 0 );
				SendValues( &va );
				break;
			case GC_gDisplay:
/*		Debug( "GC_gDisplay\n" );*/
				disp = GRecvStr();
/*		Debug( " Display %s\n", disp );*/
				dcls = GRecvStr();
/*		Debug( " Class %s\n", dcls );*/
				Debug( "getting config for display %s, class %s\n", disp, dcls );
				MkDSpec( &dspec, disp, dcls ? dcls : "" );
				ReadConf();
				CopyValues( &va, &sec_Core, &dspec, 0 );
				CopyValues( &va, &sec_Greeter, &dspec, 0 );
				free( disp );
				if (dcls)
					free( dcls );
				SendValues( &va );
				break;
#ifdef XDMCP
			case GC_gXaccess:
				ReadAccessFile( cfgfile );
				break;
#endif
			default:
				Debug( "Unsupported config category %#x\n", what );
			}
			free( cfgfile );
			break;
		default:
			Debug( "Unknown config command %#x\n", what );
		}
	}

/*	Debug( "Config reader exiting ..." );*/
	return EX_NORMAL;
}
Exemple #10
0
static void
ReadAccessFile( const char *fname )
{
	HostEntry *hostList, **hostPtr = &hostList;
	AliasEntry *aliasList, **aliasPtr = &aliasList;
	AclEntry *acList, **acPtr = &acList, *acl;
	ListenEntry *listenList, **listenPtr = &listenList;
	char *displayOrAlias, *hostOrAlias;
	File file;
	int nHosts, nAliases, nAcls, nListens, nChars, error, bad;
	int i, len;

	nHosts = nAliases = nAcls = nListens = nChars = error = 0;
	if (!readFile( &file, fname, "XDMCP access control" ))
		goto sendacl;
	while ((displayOrAlias = ReadWord( &file, &len, FALSE ))) {
		if (*displayOrAlias == ALIAS_CHARACTER)
		{
			if (!(*aliasPtr = (AliasEntry *)Malloc( sizeof(AliasEntry)))) {
				error = 1;
				break;
			}
			(*aliasPtr)->name = displayOrAlias + 1;
			nChars += len;
			(*aliasPtr)->hosts = nHosts;
			(*aliasPtr)->pHosts = hostPtr;
			(*aliasPtr)->nhosts = 0;
			(*aliasPtr)->hasBad = 0;
			while ((hostOrAlias = ReadWord( &file, &len, TRUE ))) {
				if (ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len,
				               PARSE_NO_BCAST ))
					(*aliasPtr)->nhosts++;
				else
					(*aliasPtr)->hasBad = 1;
			}
			aliasPtr = &(*aliasPtr)->next;
			nAliases++;
		}
		else if (!strcmp( displayOrAlias, LISTEN_STRING ))
		{
			if (!(*listenPtr = (ListenEntry *)Malloc( sizeof(ListenEntry)))) {
				error = 1;
				break;
			}
			(*listenPtr)->iface = nHosts;
			if (!(hostOrAlias = ReadWord( &file, &len, TRUE )) ||
			    !strcmp( hostOrAlias, WILDCARD_STRING ) ||
			    !ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len,
			                PARSE_NO_BCAST|PARSE_NO_PAT|PARSE_NO_ALIAS ))
			{
				(*listenPtr)->iface = -1;
			}
			(*listenPtr)->mcasts = nHosts;
			(*listenPtr)->nmcasts = 0;
			while ((hostOrAlias = ReadWord( &file, &len, TRUE ))) {
				if (ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len,
				               PARSE_NO_BCAST|PARSE_NO_PAT|PARSE_NO_ALIAS ))
					(*listenPtr)->nmcasts++;
			}
			listenPtr = &(*listenPtr)->next;
			nListens++;
		}
		else
		{
			if (!(*acPtr = (AclEntry *)Malloc( sizeof(AclEntry)))) {
				error = 1;
				break;
			}
			(*acPtr)->flags = 0;
			if (*displayOrAlias == NEGATE_CHARACTER) {
				(*acPtr)->flags |= a_notAllowed;
				displayOrAlias++;
			} else if (*displayOrAlias == EQUAL_CHARACTER)
				displayOrAlias++;
			(*acPtr)->entries = nHosts;
			(*acPtr)->pEntries = hostPtr;
			(*acPtr)->nentries = 1;
			if (!ParseHost( &nHosts, &hostPtr, &nChars, displayOrAlias, len,
			                PARSE_NO_BCAST ))
			{
				bad = 1;
				if ((*acPtr)->flags & a_notAllowed) {
					LogError( "XDMCP ACL: unresolved host in denying rule\n" );
					error = 1;
				}
			} else
				bad = 0;
			(*acPtr)->hosts = nHosts;
			(*acPtr)->pHosts = hostPtr;
			(*acPtr)->nhosts = 0;
			while ((hostOrAlias = ReadWord( &file, &len, TRUE ))) {
				if (!strcmp( hostOrAlias, CHOOSER_STRING ))
					(*acPtr)->flags |= a_useChooser;
				else if (!strcmp( hostOrAlias, NOBROADCAST_STRING ))
					(*acPtr)->flags |= a_notBroadcast;
				else {
					if (ParseHost( &nHosts, &hostPtr, &nChars,
					               hostOrAlias, len, PARSE_NO_PAT ))
						(*acPtr)->nhosts++;
				}
			}
			if (!bad) {
				acPtr = &(*acPtr)->next;
				nAcls++;
			}
		}
	}

	if (!nListens) {
		if (!(*listenPtr = (ListenEntry *)Malloc( sizeof(ListenEntry))))
			error = 1;
		else {
			(*listenPtr)->iface = -1;
			(*listenPtr)->mcasts = nHosts;
			(*listenPtr)->nmcasts = 0;
#if defined(IPv6) && defined(AF_INET6) && defined(XDM_DEFAULT_MCAST_ADDR6)
			if (ParseHost( &nHosts, &hostPtr, &nChars,
			               XDM_DEFAULT_MCAST_ADDR6,
			               sizeof(XDM_DEFAULT_MCAST_ADDR6)-1,
			               PARSE_ALL ))
				(*listenPtr)->nmcasts++;
#endif
			nListens++;
		}
	}

	for (acl = acList, i = 0; i < nAcls; i++, acl = acl->next)
		if (checkHostlist( acl->pEntries, acl->nentries, aliasList, nAliases,
		                   0, (acl->flags & a_notAllowed) ? CHECK_NOT : 0 ) ||
		    checkHostlist( acl->pHosts, acl->nhosts, aliasList, nAliases,
		                   0, CHECK_NO_PAT ))
			error = 1;

	if (error) {
		nHosts = nAliases = nAcls = nListens = nChars = 0;
	  sendacl:
		LogError( "No XDMCP requests will be granted\n" );
	}
	GSendInt( nHosts );
	GSendInt( nListens );
	GSendInt( nAliases );
	GSendInt( nAcls );
	GSendInt( nChars );
	for (i = 0; i < nHosts; i++, hostList = hostList->next) {
		GSendInt( hostList->type );
		switch (hostList->type) {
		case HOST_ALIAS:
			GSendStr( hostList->entry.aliasPattern );
			break;
		case HOST_PATTERN:
			GSendStr( hostList->entry.hostPattern );
			break;
		case HOST_ADDRESS:
			GSendArr( hostList->entry.displayAddress.hostAddrLen,
			          hostList->entry.displayAddress.hostAddress );
			GSendInt( hostList->entry.displayAddress.connectionType );
			break;
		}
	}
	for (i = 0; i < nListens; i++, listenList = listenList->next) {
		GSendInt( listenList->iface );
		GSendInt( listenList->mcasts );
		GSendInt( listenList->nmcasts );
	}
	for (i = 0; i < nAliases; i++, aliasList = aliasList->next) {
		GSendStr( aliasList->name );
		GSendInt( aliasList->hosts );
		GSendInt( aliasList->nhosts );
	}
	for (i = 0; i < nAcls; i++, acList = acList->next) {
		GSendInt( acList->entries );
		GSendInt( acList->nentries );
		GSendInt( acList->hosts );
		GSendInt( acList->nhosts );
		GSendInt( acList->flags );
	}
}