mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-21 18:58:10 +02:00
Since the keyfile plugin only stores the paths of these files, we don't really care about what's in them. We also don't want to attempt to read them as keyfiles, which produces warnings in the logs.
105 lines
3.1 KiB
C
105 lines
3.1 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
|
/* NetworkManager system settings service
|
|
*
|
|
* 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.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* (C) Copyright 2010 Red Hat, Inc.
|
|
*/
|
|
|
|
#include <glib.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "utils.h"
|
|
|
|
|
|
static const char temp_letters[] =
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
|
|
/*
|
|
* Check '.[a-zA-Z0-9]{6}' file suffix used for temporary files by g_file_set_contents() (mkstemp()).
|
|
*/
|
|
static gboolean
|
|
check_mkstemp_suffix (const char *path)
|
|
{
|
|
const char *ptr;
|
|
|
|
g_return_val_if_fail (path != NULL, FALSE);
|
|
|
|
/* Matches *.[a-zA-Z0-9]{6} suffix of mkstemp()'s temporary files */
|
|
ptr = strrchr (path, '.');
|
|
if (ptr && (strspn (ptr + 1, temp_letters) == 6) && (! ptr[7]))
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
static gboolean
|
|
check_prefix (const char *base, const char *tag)
|
|
{
|
|
int len, tag_len;
|
|
|
|
g_return_val_if_fail (base != NULL, TRUE);
|
|
g_return_val_if_fail (tag != NULL, TRUE);
|
|
|
|
len = strlen (base);
|
|
tag_len = strlen (tag);
|
|
if ((len > tag_len) && !strncasecmp (base, tag, tag_len))
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
static gboolean
|
|
check_suffix (const char *base, const char *tag)
|
|
{
|
|
int len, tag_len;
|
|
|
|
g_return_val_if_fail (base != NULL, TRUE);
|
|
g_return_val_if_fail (tag != NULL, TRUE);
|
|
|
|
len = strlen (base);
|
|
tag_len = strlen (tag);
|
|
if ((len > tag_len) && !strcasecmp (base + len - tag_len, tag))
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
#define SWP_TAG ".swp"
|
|
#define SWPX_TAG ".swpx"
|
|
#define PEM_TAG ".pem"
|
|
#define DER_TAG ".der"
|
|
|
|
gboolean
|
|
nm_keyfile_plugin_utils_should_ignore_file (const char *filename)
|
|
{
|
|
char *base;
|
|
gboolean ignore = FALSE;
|
|
|
|
g_return_val_if_fail (filename != NULL, TRUE);
|
|
|
|
base = g_path_get_basename (filename);
|
|
g_return_val_if_fail (base != NULL, TRUE);
|
|
|
|
/* Ignore files with certain patterns */
|
|
if ( (check_prefix (base, ".") && check_suffix (base, SWP_TAG)) /* vim temporary files: .filename.swp */
|
|
|| (check_prefix (base, ".") && check_suffix (base, SWPX_TAG)) /* vim temporary files: .filename.swpx */
|
|
|| check_suffix (base, PEM_TAG) /* 802.1x certificates and keys */
|
|
|| check_suffix (base, DER_TAG) /* 802.1x certificates and keys */
|
|
|| check_mkstemp_suffix (base) /* temporary files created by mkstemp() */
|
|
|| base[strlen (base) - 1] == '~')
|
|
ignore = TRUE;
|
|
|
|
g_free (base);
|
|
return ignore;
|
|
}
|
|
|