Commit 6a198e7a authored by segfault's avatar segfault

Remove pre-generated Pidgin accounts (refs: #16744)

parent 23863ff2
<?xml version='1.0' encoding='UTF-8' ?>
<account version='1.0'>
<account>
<protocol>prpl-irc</protocol>
<name>XXX_NICK_XXX@irc.oftc.net</name>
<statuses>
<status type='available' name='Available' active='true'>
<attributes/>
</status>
<status type='away' name='Away' active='false'>
<attributes/>
</status>
<status type='offline' name='Offline' active='false'>
<attributes/>
</status>
</statuses>
<settings>
<setting name='username' type='string'>XXX_NICK_XXX</setting>
<setting name='encoding' type='string'>UTF-8,ISO-8859-1</setting>
<setting name='realname' type='string'>XXX_NICK_XXX</setting>
<setting name='port' type='int'>6697</setting>
<setting name='ssl' type='bool'>1</setting>
</settings>
<settings ui='gtk-gaim'>
<setting name='auto-login' type='bool'>0</setting>
</settings>
<current_error/>
</account>
<account>
<protocol>prpl-irc</protocol>
<name>XXX_NICK_XXX@127.0.0.1</name>
<statuses>
<status type='available' name='Available' active='true'>
<attributes/>
</status>
<status type='away' name='Away' active='false'>
<attributes/>
</status>
<status type='offline' name='Offline' active='false'>
<attributes/>
</status>
</statuses>
<settings>
<setting name='username' type='string'>XXX_NICK_XXX</setting>
<setting name='encoding' type='string'>UTF-8,ISO-8859-1</setting>
<setting name='realname' type='string'>XXX_NICK_XXX</setting>
<setting name='port' type='int'>6668</setting>
<setting name='ssl' type='bool'>0</setting>
</settings>
<settings ui='gtk-gaim'>
<setting name='auto-login' type='bool'>0</setting>
</settings>
<proxy>
<type>none</type>
</proxy>
<current_error/>
</account>
</account>
<?xml version='1.0' encoding='UTF-8' ?>
<purple version='1.0'>
<privacy>
<account proto='prpl-irc' name='XXX_NICK_XXX@irc.oftc.net' mode='1'/>
</privacy>
</purple>
#!/bin/sh
# List of at least 2000 possible nicknames
NICKS_LIST=/usr/share/tails/firstnames.txt
# returns true with probability $1
prob()
{
# sh doesn't have bash's $RANDOM, so we implement it
RANDOM=$(expr $(od -Anv -N4 -tu4 /dev/urandom) % 32768)
# we compare with > instead of <= due to mismatch between bash and bc
# on what values true and false have.
return $(echo "scale = 10; ${RANDOM}/32767 > ${1}" | bc)
}
leet_nick()
{
# we leave the first letter due to restrictions on nicks in IRC
first=$(expr substr ${1} 1 1)
rest=${1#?}
rest=$(echo "${rest}" | tr 'e' '3' | tr 'i' '1' | tr 'o' '0')
echo "${first}${rest}"
}
generate_nick()
{
NICK=$(/usr/local/bin/lc.py -g 1 --min 4 --max 10 "${NICKS_LIST}")
if prob 0.90; then
NICK=$(echo "${NICK}" | tr '[:upper:]' '[:lower:]')
fi
if prob 0.05; then
if prob 0.50; then
NICK="${NICK}_"
else
NICK="${NICK}^"
fi
fi
if prob 0.05; then
NICK=$(leet_nick "${NICK}")
fi
echo ${NICK}
}
Configure_pidgin ()
{
echo "- configuring Pidgin"
NICK=$(generate_nick)
for file in accounts.xml blist.xml ; do
sudo -H -u "${LIVE_USERNAME}" sed -i'' "s,XXX_NICK_XXX,${NICK}," "/home/${LIVE_USERNAME}/.purple/${file}"
done
# Creating state file
touch /var/lib/live/config/pidgin
}
Configure_pidgin
#!/usr/bin/python3
# The MIT License
#
# Copyright (c) 2011 Christopher Pound
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# lc.py -- language confluxer (http://www.ruf.rice.edu/~pound/lc.py)
#
# - Written by Christopher Pound (pound@rice.edu), July 1993.
# - Loren Miller suggested I make sure lc starts by picking a
# letter pair that was at the beginning of a data word, Oct 95.
# - Cleaned it up a little bit, March 95; more, September 01
# - Python version, Jul 09
#
# The datafile should be a bunch of words from some language
# with minimal punctuation or garbage (# starts a comment).
from optparse import OptionParser
import random
import re
import sys
class Pseudolanguage:
def __init__(self, **dict):
"""Set up a new pseudolanguage"""
dict.setdefault('name', '')
self.name = dict['name']
self.parsed = False
self.data = {}
self.inits = {}
self.pairs = {}
def incorporate(self, files):
"""Load list of files for this pseudolanguage into self.data"""
self.parsed = False
for f in files:
words = []
with open(f) as text:
for line in text:
line = line.strip()
line = re.sub(r"#.*", "", line)
words.extend(re.split(r"\s+", line))
self.data[f] = words
def delete(self, files):
"""Delete a list of languages from self.data"""
self.parsed = False
for f in files:
del self.data[f]
def parse(self):
"""Parse pseudolanguage's data into self.inits and self.pairs"""
if not self.parsed:
self.inits.clear()
self.pairs.clear()
for f in self.data:
for word in self.data[f]:
word += ' '
if len(word) > 3:
if word[0:2] in self.inits:
self.inits[word[0:2]].append(word[2:3])
else:
self.inits[word[0:2]] = [word[2:3]]
pos = 0
while pos < len(word)-2:
if word[pos:pos+2] in self.pairs:
self.pairs[word[pos:pos+2]].append(word[pos+2])
else:
self.pairs[word[pos:pos+2]] = [word[pos+2]]
pos = pos + 1
self.parsed = True
def dump(self):
"""Print the current parsed data; use pickle for inflatable dumps"""
self.parse()
print('name = """', self.name, '"""')
print("dump = { 'inits': ", self.inits, ",")
print("'pairs': ", self.pairs, " }")
def generate(self, number, min, max):
"""Generate list of words of min and max lengths"""
self.parse()
wordlist = []
while len(wordlist) < number:
word = random.choice(list(self.inits.keys()))
while word.find(' ') == -1:
word += random.choice(self.pairs[word[-2:]])
word = word.strip()
if len(word) >= min and len(word) <= max:
wordlist.append(word)
return wordlist
if __name__ == '__main__':
usage = "usage: %prog [options] datafile1 [datafile2 ...]"
parser = OptionParser(usage=usage, version="%prog 1.0")
parser.add_option("-d", "--dump", action="store_true",
dest="dump", default=False,
help="Dump internal representation of the pseudolanguage")
parser.add_option("-g", "--generate", type="int", dest="num",
help="Generate specified number of words")
parser.add_option("--min", type="int", dest="min", default=3,
help="Set the minimum length of each word")
parser.add_option("--max", type="int", dest="max", default=9,
help="Set the maximum length of each word")
parser.add_option("--name", dest="name", default=' ',
help="Set the name of the pseudolanguage")
(options, args) = parser.parse_args()
aLanguage = Pseudolanguage(name=options.name)
aLanguage.incorporate(args)
if options.dump:
aLanguage.dump()
else:
results = aLanguage.generate(options.num, options.min, options.max)
for word in results:
print(word)
......@@ -40,8 +40,6 @@ acl
zenity
# Needed by tails-htp-notify-user and others
libdesktop-notify-perl
# Needed by /lib/live/config/2010-pidgin
bc
# Needed by tails-transform-mirror-url
nodejs
# Needed by SSH's ProxyCommand
......
......@@ -69,7 +69,6 @@ Feature: Chatting anonymously using Pidgin
@check_tor_leaks @fragile
Scenario: Connecting to the tails multi-user chat with my XMPP account
Given I have started Tails from DVD and logged in and the network is connected
And Pidgin has the expected accounts configured with random nicknames
When I start "Pidgin Internet Messenger" via GNOME Activities Overview
Then I see Pidgin's account manager window
And I create my XMPP account
......@@ -101,7 +100,6 @@ Feature: Chatting anonymously using Pidgin
@check_tor_leaks @fragile
Scenario: Using a persistent Pidgin configuration
Given I have started Tails without network from a USB drive with a persistent partition enabled and logged in
And Pidgin has the expected accounts configured with random nicknames
And the network is plugged
And Tor is ready
And available upgrades have been checked
......
......@@ -295,27 +295,6 @@ def pidgin_otr_keys
return $vm.file_content("/home/#{LIVE_USER}/.purple/otr.private_key")
end
Given /^Pidgin has the expected accounts configured with random nicknames$/ do
expected = [
["irc.oftc.net", "prpl-irc", "6697"],
["127.0.0.1", "prpl-irc", "6668"],
]
configured_pidgin_accounts.values.each() do |account|
assert(account['nickname'] != "XXX_NICK_XXX", "Nickname was no randomised")
assert_equal(account['nickname'], account['real_name'],
"Nickname and real name are not identical: " +
account['nickname'] + " vs. " + account['real_name'])
assert_equal(account['name'], account['nickname'],
"Account name and nickname are not identical: " +
account['name'] + " vs. " + account['nickname'])
candidate = [account['network'], account['protocol'], account['port']]
assert(expected.include?(candidate), "Unexpected account: #{candidate}")
expected.delete(candidate)
end
assert(expected.empty?, "These Pidgin accounts are not configured: " +
"#{expected}")
end
When /^I open Pidgin's account manager window$/ do
@screen.wait_and_click('PidginMenuAccounts.png', 20)
@screen.wait_and_click('PidginMenuManageAccounts.png', 20)
......
......@@ -1135,17 +1135,8 @@ status. Only IRC and Jabber/XMPP protocols are left available, to
avoid the usage of less well audited plugins. The Off-the-record
plugin is enabled
to help one-to-one conversations being as private and unrecordable as
possible. At boot a language confluxer generates a random looking default
nickname from the 2000 most common U.S. names (according to the U.S. social
security administration in the 1970's), which results in something Englishesque
sounding. The nickname is further made to look like a typical IRC nickname by
prefixing it with ^ or _ with probability 0.05, and changing it to leet speak
with probability 0.05. When answering to CTCP requests, Pidgin does
not leak any information apart from PING and VERSION (`Purple IRC`),
which is deemed acceptable as there are probably other weirdness in
how the protocol is implemented, that disclose as much.
- [[!tails_gitweb config/chroot_local-includes/lib/live/config/2010-pidgin]]
possible.
- [[!tails_gitweb_dir config/chroot_local-includes/etc/skel/.purple]]
- [[!tails_gitweb config/chroot_local-hooks/09-remove_unsupported_pidgin_libs]]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment