/*
* vQadmin Virtual Administration Interface
* Copyright (C) 2000-2002 Inter7 Internet Technologies, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* vol@inter7.com
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "global.h"
#include "vauth.h"
#define MAX_TMPBUF 200
char tmpbuf[MAX_TMPBUF];
char Lang[MAX_TMPBUF];
FILE *lang_fs = NULL;
void set_language()
{
char *tmpstr;
int lang_err;
if ( lang_fs != NULL ) {
fclose(lang_fs);
lang_fs = NULL;
}
memset(Lang, 0, MAX_TMPBUF);
tmpstr = getenv("HTTP_ACCEPT_LANGUAGE");
if ( tmpstr != NULL ) {
strncpy(tmpbuf, tmpstr, MAX_TMPBUF);
tmpstr = strtok(tmpbuf, " ,\n");
for(lang_err = -1;tmpstr!=NULL && lang_err!=0;) {
lang_err = open_lang(tmpstr);
if ( lang_err == 0 ) snprintf(Lang, MAX_TMPBUF - 1, "%s", tmpstr);
else tmpstr = strtok(NULL, " ,\n");
}
if ( tmpstr == NULL ) strcpy(Lang, "en");
} else {
strcpy(Lang, "en");
}
if ( lang_fs == NULL ) open_lang(Lang);
}
int open_lang( char *lang)
{
char tmpfile[MAX_TMPBUF];
struct stat mystat;
/* only open files in the local directory */
if ( strstr(lang, ".") != NULL || strstr(lang, "/") != NULL ) {
global_error("invalid language file",1,0);
}
if ( lang_fs == NULL ) {
memset(tmpfile, 0, MAX_TMPBUF);
snprintf(tmpfile, MAX_TMPBUF - 1, "html/%s", lang);
/* check for symbolic link */
if ( lstat(tmpfile, &mystat) == 0 && S_ISLNK(mystat.st_mode) ) {
global_error("invalid file",1,0);
}
if ( (lang_fs=fopen(tmpfile, "r"))==NULL) return(-1);
}
return(0);
}
void put_lang_code( char *index )
{
char *tmpstr;
char lang_index[4];
int i;
for(i=0;i<3;++i) lang_index[i] = *(index+i);
lang_index[3] = 0;
if (lang_fs == NULL) return;
rewind(lang_fs);
while(fgets(tmpbuf,MAX_TMPBUF,lang_fs)!=NULL){
tmpstr = strtok(tmpbuf, " ");
if (strcmp(tmpstr, lang_index) == 0 ) {
tmpstr = strtok(NULL, "\n");
fputs(tmpstr, stdout);
return;
}
}
}
char *get_lang_code( char *index )
{
char *tmpstr;
char lang_index[4];
int i;
for(i=0;i<3;++i) lang_index[i] = *(index+i);
lang_index[3] = 0;
if (lang_fs == NULL) return("");
rewind(lang_fs);
while(fgets(tmpbuf,MAX_TMPBUF,lang_fs)!=NULL){
tmpstr = strtok(tmpbuf, " ");
if (strcmp(tmpstr, lang_index) == 0 ) {
tmpstr = strtok(NULL, "\n");
return(tmpstr);
}
}
return("");
}
syntax highlighted by Code2HTML, v. 0.9.1