convert.pl revision 89298
1219820Sjeff#!/usr/bin/perl -w
2219820Sjeff#-
3219820Sjeff# Copyright (c) 2001,2002 Networks Associates Technologies, Inc.
4219820Sjeff# All rights reserved.
5219820Sjeff#
6219820Sjeff# This software was developed for the FreeBSD Project by ThinkSec AS and
7219820Sjeff# NAI Labs, the Security Research Division of Network Associates, Inc.
8219820Sjeff# under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
9219820Sjeff# DARPA CHATS research program.
10219820Sjeff#
11219820Sjeff# Redistribution and use in source and binary forms, with or without
12219820Sjeff# modification, are permitted provided that the following conditions
13219820Sjeff# are met:
14219820Sjeff# 1. Redistributions of source code must retain the above copyright
15219820Sjeff#    notice, this list of conditions and the following disclaimer.
16219820Sjeff# 2. Redistributions in binary form must reproduce the above copyright
17219820Sjeff#    notice, this list of conditions and the following disclaimer in the
18219820Sjeff#    documentation and/or other materials provided with the distribution.
19219820Sjeff# 3. The name of the author may not be used to endorse or promote
20219820Sjeff#    products derived from this software without specific prior written
21219820Sjeff#    permission.
22219820Sjeff#
23219820Sjeff# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24219820Sjeff# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25219820Sjeff# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26219820Sjeff# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
27219820Sjeff# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28219820Sjeff# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29219820Sjeff# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30219820Sjeff# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31219820Sjeff# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32219820Sjeff# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33219820Sjeff# SUCH DAMAGE.
34219820Sjeff#
35219820Sjeff# $FreeBSD: head/etc/pam.d/convert.pl 89298 2002-01-12 23:08:59Z des $
36219820Sjeff#
37273246Shselasky
38219820Sjeffuse strict;
39219820Sjeffuse Fcntl;
40219820Sjeffuse vars qw(%SERVICES);
41219820Sjeff
42219820SjeffMAIN:{
43219820Sjeff    my $line;
44219820Sjeff    my $service;
45219820Sjeff    my $version;
46219820Sjeff    my $type;
47219820Sjeff    local *FILE;
48219820Sjeff
49219820Sjeff    while (<>) {
50219820Sjeff	chomp();
51219820Sjeff	s/\s*$//;
52219820Sjeff	next unless m/^(\#*)(\w+)\s+(auth|account|session|password)\s+(\S.*)$/;
53219820Sjeff	$line = $1.$3;
54219820Sjeff	$line .= "\t" x ((16 - length($line) + 7) / 8);
55219820Sjeff	$line .= $4;
56219820Sjeff	push(@{$SERVICES{$2}->{$3}}, $line);
57219820Sjeff    }
58219820Sjeff
59219820Sjeff    foreach $service (keys(%SERVICES)) {
60219820Sjeff	$version = '$' . 'FreeBSD' . '$';
61219820Sjeff	if (sysopen(FILE, $service, O_RDONLY)) {
62219820Sjeff		while (<FILE>) {
63219820Sjeff			next unless (m/(\$[F]reeBSD.*?\$)/);
64219820Sjeff			$version = $1;
65219820Sjeff			last;
66219820Sjeff		}
67219820Sjeff		close(FILE);
68219820Sjeff	}
69219820Sjeff	sysopen(FILE, $service, O_RDWR|O_CREAT|O_TRUNC)
70219820Sjeff	    or die("$service: $!\n");
71219820Sjeff	print(FILE "#\n");
72219820Sjeff	print(FILE "# $version\n");
73219820Sjeff	print(FILE "#\n");
74219820Sjeff	print(FILE "# PAM configuration for the \"$service\" service\n");
75219820Sjeff	print(FILE "#\n");
76219820Sjeff	foreach $type (qw(auth account session password)) {
77219820Sjeff	    next unless exists($SERVICES{$service}->{$type});
78219820Sjeff	    print(FILE "\n");
79219820Sjeff	    print(FILE "# $type\n");
80219820Sjeff	    print(FILE join("\n", @{$SERVICES{$service}->{$type}}, ""));
81219820Sjeff	}
82219820Sjeff	close(FILE);
83219820Sjeff	warn("$service\n");
84219820Sjeff    }
85219820Sjeff
86219820Sjeff    exit(0);
87219820Sjeff}
88219820Sjeff